Nginx rewrite로 url 경로 변경하기
rewrite 기능을 사용해서 웹서버로 들어오는 url들을 재가공해서 원하는 url로 가도록 재처리 할 수 있습니다.
http로 들어오는 트래픽을 모두 https로 보내기
server {
listen 80;
server_name www.mydomain.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443;
server_name www.mydomain.com;
}
Query string을 모두 삭제하기
Query Parameter보다 검색 친화적인 url을 생성하는 Path variable 형태로 깨끗하게 URL을 유지할 수 있도록 불필요한 Query string을 모두 삭제합니다.
location / {
set $args '';
rewrite ^/(.*)$ /$1 permanent;
}
www로 시작하는 url을 루트 도메인으로 보내기
if ($host ~* ^www\.) {
rewrite ^(.*)$ https://$host$1 permanent;
}
서브도메인으로 시작하는 url을 루트 도메인으로 보내기
if ($host ~* ^([a-z0-9\-]+\.(mydomain.com))$) {
rewrite ^(.*)$ https://$host$1 permanent;
}
www로 시작하지 않는 도메인을 www 도메인으로 보내기
if ($host !~* ^www\.) {
rewrite ^(.*)$ https://www.$host$1 permanent;
}
Query string을 Path variable로 변경하기
location ~ /subfolder/post {
if ($args ~* "^pid=(\d+)&category=linux") {
set $pid $1;
set $args '';
rewrite ^.*$ /subfolder/linux/$pid? permanent;
}
}
proxy_pass와 rewrite로 Query string을 삭제한 경로를 프록시로 전달하기
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
set $args '';
rewrite ^/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:2368;
}
프록시로 경로를 전달할 때는 rewrite로 선처리를 해야 하며, rewrite 끝에 permanent
가 아닌 break
로 종료해서 rewrite로 변경한 경로를 프록시로 전달해야 합니다.