본문 바로가기

Nginx6

rewrite break 이슈 만약 http://ybs.com/hello/world 요청을 nginx 서버가 받고 뒷단 서버(proxied server 또는 downstream server) 에 /world 경로만 전달해주고 싶다면 2가지 방법이 있다. 방법1 : rewrite + proxy_pass location /hello/ { rewrite ^/hello(/.*)$ $1 break; proxy_pass http://server.com; } rewrite 끝에 break flag 를 추가함으로써, 현재 rewrite 규칙이 적용되기는 하지만 nginx 가 수정된 URI 로 새롭게 일치하는 location 을 찾지 않도록 한다. 이후의 모든 rewrite 지시어는 무시된다. 방법2 : location 끝에 /(slash) 를 추가.. 2022. 2. 17.
nginx 수정 하면서 썼던 명령어 정리 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/ { ... 2021. 8. 3.
reset_timedout_connection 옵션 서버 모니터링을 수행하는데 Active Thread 가 끝없이 증가한적이 있었다. nginx 는 아래와 같이 upstream 을 이용해 proxied server와 keepalive 로 연결해놓고 사용중이었다. upstream ybs-server { server localhost:8080; # upstream 서버와 유지할 connection의 갯수를 keepalive로 설정한다. keepalive 200; } 그런데 nginx keepalive_timeout 설정을 했음에도 불구하고 접속이 계속 유지되고 끊기지 않았다. $ netstat -an | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8080 127.0.0.1:43585 .. 2021. 1. 19.
timeout 설정 정리 nginx 는 reverse proxy로 많이 사용되는 만큼 다양한 timeout 설정이 있다. 각각을 좀 정확히 알고 싶어서 정리했다. client_header_timeout request header 정보를 읽는데 설정된 timeout 시간이다. client_header_timeout에 지정한 시간안에 client가 헤더를 전송하지 않으면 요청은 408(Request Time-out)로 끝난다. 디폴트 값은 60초이다. client_header_timeout 60s; client_body_timeout request body 정보를 읽는데 설정된 timeout 시간이다. request body 전체 전송 timeout 시간이 아니라, 두개의 연속적인 읽기 작업 사이의 timeout 시간이다. clie.. 2021. 1. 19.
파일 업로드/다운로드 시 임시 디렉토리 권한 이슈 client_body_buffer_size 는 client 요청 바디를 읽기 위한 버퍼 크기다. 디폴트 값은 8K (32 bits) | 16K (64 bits) 다. 요청 바디 크기가 버퍼 크기보다 크면, 전체 또는 일부가 http-client-body-temp-path 에 해당하는 디렉토리에 쓰여진다. http-client-body-temp-path 는 최초 nginx 설치 할 때 --http-client-body-temp-path=path 지시자로 정한다. 디폴트 값은 prefix/proxy_temp 이고(prefix는 Nginx 빌드 결과물이 들어갈 디렉토리), 경로는 nginx.conf 에서 client_body_temp_path 지시자로 바꿀 수 있다. 이때 nginx 실행 권한과 디렉토리 접근.. 2021. 1. 19.
nginx gzip 옵션 응답을 압축하면 전송되는 데이터의 크기가 크게 줄어들기도 한다. 그러나 압축은 런타임에 발생하기 때문에 상당한 처리 오버헤드가 추가되어 성능에 부정적인 영향을 미칠 수 있다. nginx는 클라이언트에 응답을 보내기 전에 압축을 수행하지만 이미 압축 된 응답 (예 : 프록시 서버)을 "이중 압축"하지 않는다. 압축을 enable하기 위해서 gzip 지시어를 추가한다. 기본적으로 nginx는 응답을 text/html MIME type으로만 압축한다. gzip on; 다른 MINE type 응답을 압축하기 위해선 gzip_types 지시어를 추가하고 추가적인 type 리스트를 적는다. gzip_types text/plain application/x-javascript text/xml text/css appli.. 2021. 1. 17.