웹사이트 검색

Debian Jessie에서 nginxs HttpGzipModule로 트래픽을 저장하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 데비안 8(제시)
  • 데비안 6(스퀴즈)

이 페이지에서

  1. 1 서문
  2. 2 HttpGzipModule 구성
  3. 3 테스트
  4. 4개의 링크

이 튜토리얼에서는 nginx 웹 서버(Debian Jessie)에서 HttpGzipModule을 구성하는 방법을 설명합니다. HttpGzipModule을 사용하면 nginx가 파일을 압축하고 대부분의 최신 브라우저가 수행하는 압축 콘텐츠를 처리할 수 있는 클라이언트(예: 브라우저)에 전달할 수 있습니다. HttpGzipModule을 사용하면 HTML, CSS, Javascript, 텍스트 또는 XML 파일을 약으로 압축할 수 있습니다. 원래 크기의 20 - 30%로 서버 트래픽을 절약하고 모뎀 사용자를 더 행복하게 만듭니다.

파일을 압축하면 서버에 약간 더 많은 부하가 발생하지만 내 경험상 클라이언트가 서버에 연결하는 시간이 많이 줄어들어 보상됩니다. 예를 들어, 압축되지 않은 HTML 파일을 다운로드하는 데 7초가 필요한 모뎀 사용자는 이제 동일하지만 압축된 파일에 대해 2초만 필요할 수 있습니다.

HttpGzipModule을 사용하면 압축된 콘텐츠를 처리할 수 없는 이전 브라우저를 사용하는 사용자를 제외하는 것을 두려워할 필요가 없습니다. 브라우저는 파일이 전송되기 전에 서버와 협상하며 브라우저에 압축된 콘텐츠를 처리할 수 있는 기능이 없는 경우 서버는 파일을 압축되지 않은 상태로 전달합니다.

1 서문

예를 들어 데비안 서버에서 작동하는 nginx 설정이 있다고 가정합니다. 이 튜토리얼에 표시된 대로: Debian 8에서 PHP(PHP-FPM) 및 MariaDB(LEMP)와 함께 Nginx 설치

2 HttpGzipModule 구성

/etc/nginx/nginx.conf 열기:

nano /etc/nginx/nginx.conf

gzip 압축이 이미 활성화되어 있음을 확인할 수 있습니다(http {} 섹션).

[...]
http {
[...]
##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

[...] } [...]

gzip 켜기; gzip 압축을 활성화합니다.

gzip_disable \MSIE [1-6]\.(?!.*SV1)\; 지원하지 않는 브라우저에 대해 gzip 압축을 비활성화합니다(이 경우 버전 6 SV1 이전의 MS Internet Explorer).

물론 이 구성을 미세 조정할 수 있습니다(가능한 구성 지시문 목록은 http://nginx.org/en/docs/http/ngx_http_gzip_module.html에서 찾을 수 있음).

gzip_http_버전 1.1; - HTTP 요청 버전 1.1에 대한 gzip 압축을 활성화합니다. Content-Length 헤더가 설정되지 않았기 때문에 버전 1.0에서는 Keepalives가 불가능합니다.

gzip_vary on; - 응답 헤더 Vary: Accept-Encoding을 설정합니다. 일부 프록시에는 압축된 콘텐츠를 지원하지 않는 브라우저에 제공한다는 버그가 있습니다. Vary: Accept-Encoding 헤더를 설정하여 압축된 버전과 압축되지 않은 콘텐츠 버전을 모두 저장하도록 프록시에 지시합니다.

gzip_comp_level 6; - 이것은 압축 수준(1에서 9 사이)이며, 1은 최소 압축(가장 빠름)이고 9는 가장 높음(가장 느림)입니다.

gzip_proxied 어떤; - 프록시에서 오는 요청을 처리하는 방법을 구성합니다. 어떤 수단이든 모든 요청에 대해 압축을 활성화합니다.

gzip_types 텍스트/일반 텍스트/html 텍스트/css 애플리케이션/json 애플리케이션/x-javascript 텍스트/xml 애플리케이션/xml 애플리케이션/xml+rss 텍스트/자바스크립트 애플리케이션/자바스크립트 텍스트/x-js; - 압축할 파일 형식을 nginx에 알려줍니다(text/html은 항상 압축됨). Javascript 파일은 각 서버에서 다른 파일 유형을 가질 수 있으므로 여러 가지 가능한 Javascript MIME 유형을 포함했습니다(XML도 마찬가지임).

gzip_buffers 16 8k; - 압축 버퍼의 개수와 크기를 할당합니다. 기본값은 gzip_buffers 4 4k입니다. 또는 gzip_buffers 4 8k;, 하지만 큰 Javascript 또는 CSS 파일도 압축할 수 있도록 해당 값을 늘렸습니다.

따라서 최종 구성은 다음과 같습니다.

[...]
http {
    [...]
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    [...]
}
[...]

nginx를 다시 로드합니다.

service nginx reload

3 테스트

구성이 작동하는지 테스트하려면 Firefox 또는 Google Chrome에서 개발자 도구를 사용하고 Firefox를 통해 텍스트 파일(예: 정적 HTML 페이지)에 액세스할 수 있습니다. HTTP 헤더 출력에서 이제 클라이언트(Firefox)가 Accept-Encoding: gzip,deflate 헤더를 전송하여 서버에 gzip 및 deflate 형식의 압축된 콘텐츠를 허용함을 알리는 것을 볼 수 있습니다. 서버는 파일을 압축하고 Content-Encoding: gzip 헤더와 함께 전송해야 합니다(이 예에서 볼 수 있듯이 nginx는 Vary: Accept-Encoding 헤더도 설정함).

4 링크

  • nginx HttpGzipModule: http://nginx.org/en/docs/http/ngx_http_gzip_module.html
  • 데비안: http://www.debian.org/