HTTP요청 HTTPS로 redirect 하기 - NGINX 의 Rewrite Rules

shkilo·2021년 2월 22일
0

할고래DO에 성공적으로 HTTPS를 적용한 후 모든 요청이 SSL/TLS를 사용하도록 강제하려고 한다. NGINX를 활용하여 포트 80으로 들어오는 모든 요청을 HTTPS로 리다이렉트 한다.

server {
    listen 80;
    server_name www.domain.com;
    return 301 https://www.domain.com$request_uri;
}

if 와 rewrite 를 사용하는 방법도 있는데,

if ($scheme != "https") {
    rewrite ^ https://www.mydomain.com$uri permanent;
}

불필요한 if condition 의 연산 및 rewrite 의 regex 연산이 이루어지기 때문에 이는 권장되지 않는다.

NGINX 의 Rewrite Rules

다음 두 가지 용도로 사용된다.

  • 클라이언트가 요청하는 리소스가 다른 location에 있다고 알림: return, rewrite
  • NGINX 내부의 처리과정 관리: try_files
    ex) 리소스가 동적으로 생성되어야 할 때 app서버로 요청 포워딩

return vs rewrite

  1. rewrite는 정규표현식을 평가해야 하기 때문에 처리비용이 더 든다.
  2. rewrite는 status code 301 | 302 만 반환할 수있다.
  3. return 은 항상 모든 처리를 중지하고 response를 보내지만 rewrite는 그렇지 않다.

가능한한 return 을 사용하는 것이 권장된다.

try_files

try_files file1, file2, ... uri;

try_files 뒤에 지정된 파일들 중에 존재하는 첫번째 파일을 반환한다. 존재하지 않으면 nginx 내부에서 uri로 redirect한다.

ex) SPA 에서 index 이외의 route 에서 새로고침을 할때
할고래DO 에도 적용되어 있다.

try_files $uri $uri/ /index.html;

참고

https://www.nginx.com/blog/creating-nginx-rewrite-rules/
https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

0개의 댓글