Child pages
  • nginx 에 gzip 으로 컨텐츠 압축 설정하기

Contents


gtmetrix 같은 웹 사이트 속도 측정 서비스의 결과를 보면 contents compression 을 적용했는지 확인할 수 있는 항목이 있습니다.


컨텐츠 압축은 전송되는 데이타 양을 줄일수 있고 웹 서버 설정만으로 쉽게 적용이 가능하므로 웹 사이트를 튜닝할 때 제일 먼저 적용해야 하는 항목입니다.


압축 설정은 가상 호스트마다 하지 말고 메인 설정 파일(/etc/nginx/nginx.conf) 의 http 블록에 설정하면 전역적으로 적용되므로 편리합니다.

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    # 압축 설정
}



설정

제일 먼저 설정할 항목은 gzip on; 으로 컨텐츠 압축 사용을 지시하는 것입니다.

http {
  gzip on;


  gzip_disable "msie6";

gzip_disable 에는 압축을 적용하지 않을 브라우저를 지정하며 예전 IE 는 압축을 지원하지 않으므로 msie6 는 예외 항목으로 설정합니다.


압축 설정

gzip_comp_level 6;
gzip_min_length 500;
gzip_buffers 16 8k;
gzip_proxied any;
  • gzip_comp_level : 1 ~ 9까지 설정할 수 있으며 숫자가 클수록 압축율은 올라가지만 압축 속도는 느려집니다.

  • gzip_min_length: 압축을 적용할 컨텐츠의 최소 사이즈를 지정하며 이보다 작은 파일은 압축하지 않습니다. 

  • gzip_buffers : 버퍼의 숫자와 크기를 지정하며 16은 버퍼의 숫자, 8k 는 크기입니다.

  • gzip_proxied : proxy 나 캐시 서버에서 요청할 경우 동작 여부를 설정합니다. proxy 여부는 Via 헤더의 존재 여부로 확인하며 다음과 같은 설정이 가능합니다.

    • off: 프락시에서 요청할 경우 압축하지 않습니다.

    • expired: 요청 헤더에 Expires 가 있고 만료되었을 경우에만 압축합니다.

    • no-cache: 요청 헤더에 Cache-Control 가 있고 no-cache 일 경우에만 압축합니다.
    • no-store: 요청 헤더에 Cache-Control 가 있고 no-store 일 경우에만 압축합니다.
    • any: 항상 압축합니다. 

그 외 가능한 설정은 http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_proxied 를 참고하세요


content type 설정

컨텐츠의 유형에 따라 gzip_types 지시자로 압축 여부를 설정할 수 있으며 아래 설정은 일반적으로 많이 사용하는 컨텐츠 유형에 대해 압축하는 예로 가독성을 위해 개행을 적용했습니다.

gzip_types
    text/plain
    text/css
    text/js
    text/xml
    text/javascript
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/rss+xml
    image/svg+xml;


최종 설정

nginx 의 메인 설정 파일인 nginx.conf 의 http 항목에 다음과 같이 설정하면 됩니다.

 Click here to expand...
http {
 ## ...
  gzip  on;
  gzip_disable "msie6";


  gzip_comp_level 6;
  gzip_min_length 1100;
  gzip_buffers 16 8k;
  gzip_proxied any;
 gzip_types
        text/plain
        text/css
        text/js
        text/xml
        text/javascript
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        image/svg+xml;
}


압축 여부 확인

압축되고 있는지 확인은 서버의 응답 헤더에 Content-Encoding: gzip 이 포함되었는지 확인하면 되며 Chrome 의 경우 개발자 도구의 Network 탭에서 확인할 수 있습니다.


커맨드에서 확인할 경우 'Accept-Encoding: gzip,deflate' 헤더를 포함해서 curl 을 호출하면 됩니다.

curl -L -I -H 'Accept-Encoding: gzip,deflate' https://google.com


Ref

  • No labels

This page has no comments.