1. nginx configure 확인(추가된 모듈이나 conf-path 등등)
$ /(nginx 디렉토리)/sbin/nginx -V
# cf) nginx 버전 확인
$ /(nginx 디렉토리)/sbin/nginx -v
2. nginx 문법체크/중지/시작
# 문법체크
$ /(nginx 디렉토리)/sbin/nginx -t
# 중지
$ /(nginx 디렉토리)/sbin/nginx -s stop
# 시작
$ /(nginx 디렉토리)/sbin/nginx
3. path variable 요청은 = 로 exact matching 하면 안됌
아래와 같이 '=' 로 location 을 만들면 location 우선순위가 가장 높다(요청된 URI와 지정된 문자열이 정확히 일치).
location = /ybs/api/ {
...
}
location = /ybs/web/ {
...
}
그런데 path variable 방식은 /ybs/api/1, /ybs/web/2 와 같이 URI 에 파라미터가 있기 때문에 문자열이 정확히 일치할 수 가 없다.
그러므로 그 다음 우선순위인 '=' 없는 location으로 만들어야 한다.
location /ybs/api/ {
...
}
location /ybs/web/ {
...
}
4. URI 짜르기
예를 들어 요청이 /ybs/api/08/03 이렇게 오면 아래 location 이 받게 되고, /ybs/api/ 하위의 /08/03 path 만 proxy_pass 에 붙어서 전달된다(그리고 ybs_server 는 upstream 으로 선언된 거).
location /ybs/api/ {
rewrite ^/ybs/api(/.*)$ $1 break;
proxy_pass http://ybs_server;
...
}
5. nginx resolve 설정
새롭게 지정한 proxy_pass URL 에 대해서 'no resolver defined to resolve (domain)' 에러가 발생했다.
다른 location 들에 있는 resolver 지시자를 추가적으로 넣어서 해결했다(resolver dns 서버 ip)
포트를 명시하지 않으면 53을 쓴다. dns 서버 쿼리 시 라운드 로빈 방식이다. IPv6 은 당연히 지원되고(정말 옛날 버전 아닌이상)
IPv6 조회가 적합하지 않은 케이스면 ipv6=off 옵션도 있다.
디폴트로 nginx 캐시는 응답의 TTL(Time To Live) 값을 사용한다. valid=time 옵션(time은 10s, 50s 이렇게 작성)을 통해 캐시 시간 조정이 가능하다(과거 1.1.9 버전에서는 캐시 시간을 조정하는게 지원되지 않았고 항상 5분 캐시 적용이 정책이었다).
resolver_timeout 은 dns 룩업 요청을 보내고 기다리는 시간에 대한 타임아웃인데 따로 지정안하면 디폴트 30초다.
http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver
6. nginx if 지시자 사용 안했던 이유
Nginx HTTP 서버 책(끌레망 네델꾸 저)에서 if문 사용 위험성을 언급하면서 proxy_pass 는 if 블록 안에서 사용하지 말고 location 블록에 둬야 한다고 말한다(p387). nginx 공식 글에서도 if 사용에 대해 위험하단걸 언급해서 (https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/) if 사용을 지양했다.
'Nginx' 카테고리의 다른 글
rewrite break 이슈 (0) | 2022.02.17 |
---|---|
reset_timedout_connection 옵션 (0) | 2021.01.19 |
timeout 설정 정리 (0) | 2021.01.19 |
파일 업로드/다운로드 시 임시 디렉토리 권한 이슈 (0) | 2021.01.19 |
nginx gzip 옵션 (0) | 2021.01.17 |