Nginx의 가장 큰 장점이라고 생각되는 속도를 좀 더 빠르게 할 수 있는 옵션을 몇 가지 찾아 보았습니다.

 

1. send_buffer 설정

   : 외부로 나가는 데이터 용 buffer size default 값 : 32kb

    웹서버에서 제공하는 파일 사이즈가 크지 않다면 아래와 같이 send_buffer 값을 조정하여 성능을 높일 수 있습니다.

  listen 80 default sendbuf=16k;

 

2. timeout 후에도 남아 있는 data 제거

   : client가 response를 받지 않고 연결이 끊어진 경우, 해당 response data가 timeout 후에도 일정 시간동안 메모리를

    차지하게 됩니다. 아래 옵션을 on으로 해 줄 경우, timeout 이후 바로 메모리에 남아있는 데이터를 삭제하게 됩니다.

 reset_timedout_connections on;

 

3. sendfile 시용

   : 응답을 보낼 때 바로 kernel file buffer를 사용하도록 하여, user-space의 buffuer 메모리를 사용하지 않아 보다

   빠른 성능을 보장한다고 합니다. (참고 : http://man7.org/linux/man-pages/man2/sendfile.2.html)

 sendfile on;

 

4. gzip 사용

   : response data를 gzip으로 압축하여 보내도록 하여 네트웍 사용량을 줄이고 응답시간을 빨라지게 합니다.

gzip  on;
gzip_static on;
gzip_comp_level 9;
gzip_min_length 1400;
gzip_types  text/plain text/css image/png image/gif image/jpeg image/bmp text/xml application/xml;

gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

 

각 설정은 아래와 같은 의미입니다.

 - gzip on : gzip 기능 활성화

 - gzip_static on : gzip_static module을 설치해야 합니다. 요청 uri.gz 파일을 서비스 해주도록 하는 모듈입니다.

 - gzip_min_length : 해당값 이상 사이즈부터 압축하여 제공합니다. 단위는 byte 입니다.

 - gzip_http_version : 해당 버전에서 압축 사용

 - gzip_disable : user-agent를 확인하여 해당 제품의 버전일 경우 압축하지 않습니다.

 

테스트해 본 결과 아래와 같은 시간 및 속도 향상을 보였습니다.

(마지막 필드: 응답시간, 끝에서 세번째 필드: 응답파일 사이즈)

127.0.0.1 - - [31/Mar/2014:05:15:19 -0700] "GET /large.html HTTP/1.1" 200 289224 "-" 7.213
127.0.0.1 - - [31/Mar/2014:05:16:17 -0700] "GET /large.html HTTP/1.1" 200 1450 "-" 0.000