NGINX Plus

압축 및 압축 해제

이 문서에서는 응답의 압축 또는 압축 해제와 압축 파일 전송을 NGINX Plus 로 구성하는 방법에 대해 설명합니다.

서버 응답을 압축하거나 압축을 지원하지 않는 클라이언트의 경우 압축을 해제하여 전송 속도를 개선하고 서버의 오버헤드를 줄이세요.

목차

1. 소개
2. 압축 활성화
3. 압축 해제 활성화
4. 압축 파일 보내기

1. 소개

응답을 압축하면 전송되는 데이터의 크기가 크게 줄어드는 경우가 많습니다. 그러나 압축은 런타임에 이루어지기 때문에 상당한 처리 오버헤드가 추가되어 성능에 부정적인 영향을 미칠 수 있습니다. NGINX Plus 는 클라이언트에 응답을 보내기 전에 압축을 수행하지만 이미 압축된 응답(예: Proxy 서버에 의해)을 ‘이중 압축’하지는 않습니다.

2. 압축 활성화

압축을 사용하려면 gzip 지시문을 on 매개변수와 함께 추가합니다.

gzip on;

기본적으로 NGINX는 MIME 타입의 text/html로만 응답을 압축합니다. 다른 MIME 유형의 응답을 압축하려면 gzip_types 지시문을 포함시키고 추가 유형을 나열하세요.

gzip_types text/plain application/xml;

압축할 응답의 최소 길이를 지정하려면 gzip_min_length 지시문을 사용합니다. 기본값은 20Byte입니다(여기서는 1000으로 조정되었습니다).

gzip_min_length 1000;

기본적으로 NGINX는 Proxy 요청(Proxy 서버에서 오는 요청)에 대한 응답을 압축하지 않습니다. 요청이 Proxy 서버에서 온 요청인지는 요청에 Via 헤더 필드가 있는지에 따라 결정됩니다. 이러한 응답의 압축을 구성하려면 gzip_proxied 지시문을 사용합니다. 이 지시문에는 NGINX가 압축해야 하는 Proxy 요청의 종류를 지정하는 여러 매개변수가 있습니다. 일반적으로 Proxy 서버에 캐시되지 않는 요청에 대해서만 응답을 압축하는 것이 합리적입니다. 이를 위해 gzip_proxied 지시문에는 응답의 Cache-Control 헤더 필드를 확인하고 값이 no-cache, no-store 또는 private인 경우 응답을 압축하도록 NGINX에 지시하는 매개변수가 있습니다. 또한 Expires 헤더 필드의 값을 확인하려면 expired 매개변수를 포함해야 합니다. 이러한 매개변수는 다음 예제에서 Authorization 헤더 필드의 존재 여부를 확인하는 auth 매개변수와 함께 설정됩니다(권한이 부여된 응답은 최종 사용자에게만 해당되며 일반적으로 캐시되지 않습니다).

gzip_proxied no-cache no-store private expired auth;

대부분의 다른 지시문과 마찬가지로 압축을 구성하는 지시문은 http 컨텍스트 또는 server 또는 location 구성 블록에 포함될 수 있습니다.

gzip 압축의 전체 구성은 다음과 같습니다.

server {
    gzip on;
    gzip_types      text/plain application/xml;
    gzip_proxied    no-cache no-store private expired auth;
    gzip_min_length 1000;
    ...
}

3. 압축 해제 활성화

일부 클라이언트는 gzip 인코딩 방식의 응답을 지원하지 않습니다. 동시에 압축된 데이터를 저장하거나 응답을 즉시 압축하여 캐시에 저장하는 것이 바람직할 수 있습니다. 압축 데이터를 허용하는 클라이언트와 허용하지 않는 클라이언트 모두에 성공적으로 서비스를 제공하기 위해 NGINX는 후자의 유형의 클라이언트로 데이터를 보낼 때 즉시 압축을 풀 수 있습니다.

런타임 압축 해제를 활성화하려면 gunzip 지시문을 사용합니다.

location /storage/ {
    gunzip on;
    ...
}

gunzip 지시문은 gzip 지시문과 같은 컨텍스트에서 지정할 수 있습니다.

server {
    gzip on;
    gzip_min_length 1000;
    gunzip on;
    ...
}

Note: 이 지시문은 기본적으로 NGINX Open Source 빌드에 포함되지 않을 수 있는 별도의 모듈에 정의되어 있습니다.

4. 압축 파일 보내기

일반 파일 대신 압축된 버전의 파일을 클라이언트에 보내려면 적절한 컨텍스트 내에서 gzip_static 지시문을 on으로 설정하세요.

location / {
    gzip_static on;
}

이 경우 /path/to/file에 대한 요청을 처리하기 위해 NGINX는 /path/to/file.gz 파일을 찾아서 보내려고 시도합니다. 파일이 존재하지 않거나 클라이언트가 gzip을 지원하지 않는 경우 NGINX는 압축되지 않은 버전의 파일을 보냅니다.

Note: gzip_static 지시문은 즉석 압축을 사용하지 않는다는 것을 알아두세요. 단지 압축 도구로 미리 압축한 파일을 사용할 뿐입니다. 정적 콘텐츠뿐만 아니라 모든 콘텐츠를 런타임에 압축하려면 gzip 지시문을 사용하세요.

이 지시문은 별도의 모듈에 정의되어 있으며 기본적으로 NGINX Open Source 빌드에 포함되지 않을 수 있습니다.