mod_deflate - Apache HTTP Server Version 2.2

Apache HTTP Server Version 2.2

Apache > HTTP Server > Documentation > Version 2.2 > 모듈

#### Please note

This document refers to a legacy release (2.2) of Apache httpd. The active release (2.4) is documented here. If you have not already upgraded, please follow this link for more information.

You may follow this link to go to the current version of this document.

# 아파치 모듈 mod_deflate

가능한 언어: en | ja | ko

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

설명: | 내용을 클라이언트로 보내기 전에 압축한다
상태: | Extension
모듈명: | deflate_module
소스파일: | mod_deflate.c

### 요약

`mod_deflate` 모듈은 서버의 출력을 네트웍으로 클라이언트에 보내기 전에 압축하는 `DEFLATE` 출력필터를 제공한다.

### 주제

- 견본 설정
- 압축하기
- 프록시 서버 다루기

### 지시어들

### 참고

- 필터

- Comments

## 견본 설정

급한 사람을 위한 견본 설정이다.

### 일부 type만 압축

`AddOutputFilterByType DEFLATE text/html text/plain text/xml`

아래 설정은 요약하였지만 그래도 복잡하다. 설정을 완전히 이해한 후 사용하라.

### 이미지를 제외한 모든 것을 압축

`<Location />
# 필터를 추가한다
SetOutputFilter DEFLATE
# Netscape 4.x에 문제가 있다...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08에 더 문제가 있다
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE은 Netscape라고 자신을 알리지만, 문제가 없다
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# 주의: 아파치 2.0.48까지 mod_setenvif의 버그때문에
# 위의 정규표현식은 동작하지 않는다. 원하는 효과를
# 얻기위해 다음과 같이 수정하여 사용한다:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# 이미지를 압축하지 않는다
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# 프록시가 잘못된 내용을 전달하지않도록 한다
Header append Vary User-Agent env=!dont-vary
</Location>`

## 압축하기

### 출력 압축

`DEFLATE` 필터가 압축을 한다. 다음 지시어는 지시어가 있는 위치의 문서를 압축한다:

`SetOutputFilter DEFLATE`

모든 내용을 압축하면 처리하지 못하는 브라우저가 있기때문에 html 파일만을 압축하기위해 (아래 참고) `gzip-only-text/html`을 `1`로 설정할지도 모른다. 이를 `1`이 아닌 값으로 설정하면 무시한다.

보통 특별한 MIME type만 압축하려면 `AddOutputFilterByType` 지시어를 사용한다. 다음 설정은 html 파일만을 압축한다:

`<Directory "/your-server-root/manual">
AddOutputFilterByType DEFLATE text/html
</Directory>`

압축한 파일을 처리하지 못하는 브라우저에게는 압축하지않고 보내길위해 `BrowserMatch` 지시어에 `no-gzip`을 설정한다. 최적의 결과를 얻기위해 `no-gzip`과 `gzip-only-text/html`을 같이 사용할 수 있다. 이 경우 전자가 후자를 무시한다. 위 절의 설정 예제 일부를 살펴보자:

`BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html`

먼저 `User-Agent` 문자열을 보고 Netscape Navigator 버전 4.x인지 검사한다. 이 버전은 `text/html`이 아닌 type의 압축을 처리하지 못한다. 버전 4.06, 4.07, 4.08은 html 파일 압축을 처리하는대도 문제가 있다. 그래서 우리는 이 경우 deflate 필터를 완전히 사용하지않는다.

세번째 `BrowserMatch` 지시어는 Microsoft Internet Explorer가 자신을 "Mozilla/4"로 알리지만 압축된 요청을 처리할 수 있기때문에 user agent 추측을 수정한다. `User-Agent` 헤더에서 "MSIE" (`\b`는 "단어 경계"를 뜻한다) 문자열을 발견하면 앞에서 설정한 제약을 푼다.

### 주의

`DEFLATE` 필터는 항상 PHP나 SSI와 같은 RESOURCE 필터 뒤에 들어간다. 또, 내부 하위요청(subrequest)에 영향을 주지 않는다.

### 주의

`SetEnv`로 `force-gzip` 환경변수를 설정하면 브라우저의 accept-encoding 설정을 무시하고 압축된 결과를 보낸다.

### 출력 압축풀기

`mod_deflate` 모듈은 gzip으로 압축된 응답 내용을 푸는 필터도 제공한다. 이 기능을 사용하려면 다음과 같이 `SetOutputFilter`나 `AddOutputFilter`를 사용하여 출력필터순서에 `INFLATE` 필터를 추가한다.

`<Location /dav-area>
ProxyPass http://example.com/
SetOutputFilter INFLATE
</Location>`

이 예제는 example.com이 보낸 gzip으로 압축된 결과의 압축을 풀어서, 다른 필터가 더 처리할 수 있도록 한다.

### 입력 압축풀기

`mod_deflate` 모듈은 gzip으로 압축된 요청 내용을 푸는 필터도 제공한다. 이 기능을 사용하려면 다음과 같이 `SetInputFilter`나 `AddInputFilter`를 사용하여 입력필터순서에 `DEFLATE` 필터를 추가한다.

`<Location /dav-area>
SetInputFilter DEFLATE
</Location>`

요청에 `Content-Encoding: gzip` 헤더가 있다면 자동으로 압축된 내용을 푼다. gzip 요청을 할 수 있는 브라우저는 드물다. 그러나 어떤 WebDAV 클라이언트와 같은 특별한 프로그램은 요청 압축을 지원한다.

### Content-Length에 대한 주의

요청 내용을 직접 살펴본다면, `Content-Length` 헤더를 믿지마라! Content-Length 헤더는 클라이언트가 보낸 내용의 길이이지, 압축을 푼 결과의 바이트수가 아니다.

## 프록시 서버 다루기

`mod_deflate` 모듈은 프록시가 자신이 캐쉬한 응답을 적절한 `Accept-Encoding` 요청 헤더를 보낸 클라이언트에게만 보내도록 `Vary: Accept-Encoding` HTTP 응답 헤더를 추가한다. 그래서 압축된 내용을 이해할 수 없는 클라이언트에 압축된 내용을 보내지않도록 한다.

예를 들어, `User-Agent` 헤더 등에 따라 특별히 필터 적용을 취소한다면, 프록시에게 이러한 제한을 알려주기위해 직접 `Vary` 헤더에 추가해야 한다. 예를 들어, 설정이 `User-Agent`에 따라 `DEFLATE` 필터를 추가한다면 다음을 사용한다:

`Header append Vary User-Agent`

요청 헤더외의 다른 정보에 (예를 들어, HTTP 버전) 따라 압축 여부가 결정된다면, `Vary` 헤더값을 `*`로 설정해야 한다. 그러면 표준을 따르는 프록시는 캐쉬를 하지 않게 된다.

### 예제

`Header set Vary *`

## DeflateBufferSize 지시어

설명: | zlib이 한번에 압축할 크기
문법: | `DeflateBufferSize value`
기본값: | `DeflateBufferSize 8096`
사용장소: | 주서버설정, 가상호스트
상태: | Extension
모듈: | mod_deflate

`DeflateBufferSize` 지시어는 zlib이 한번에 압축할 바이트수를 지정한다.

## DeflateCompressionLevel 지시어

설명: | 출력을 어느정도 압축하는가
문법: | `DeflateCompressionLevel value`
기본값: | `Zlib's default`
사용장소: | 주서버설정, 가상호스트
상태: | Extension
모듈: | mod_deflate
지원: | 아파치 2.0.45 부터

`DeflateCompressionLevel` 지시어는 사용할 압축수준을 선택한다. 값이 클수록 압축률이 증가하지만, CPU를 더 많이 사용한다.

(가장 덜 압축) 1과 (가장 많이 압축) 9 사이의 값을 지정한다.

## DeflateFilterNote 지시어

설명: | 압축률을 로그에 기록한다
문법: | `DeflateFilterNote [type] notename`
사용장소: | 주서버설정, 가상호스트
상태: | Extension
모듈: | mod_deflate
지원: | type은 아파치 2.0.4 부터

`DeflateFilterNote` 지시어는 요청의 압축률을 로그에 기록하는 기호를 지정한다. 기호 이름은 지시어로 지정한 값이다. 통계를 위해 접근 로그에서 기호를 사용할 수 있다.

### 예제

`DeflateFilterNote ratio
LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
CustomLog logs/deflate_log deflate`

로그에서 더 정확한 값을 추출하려면 type 아규먼트로 기록할 자료를 선택한다. type는 다음중 하나이다:

`Input`
  필터 입력스트림의 바이트수를 저장한다.
`Output`
  필터 출력스트림의 바이트수를 저장한다..
`Ratio`
  압축률을 (`output/input * 100`) 저장한다. type 아규먼트를 생략하면 사용하는 기본값이다.

그래서 이렇게 로그에 기록할 수 있다:

### 정밀한 로그

`DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate`

### 참고

- `mod_log_config`

## DeflateInflateLimitRequestBody 지시어

설명: | Maximum size of inflated request bodies
문법: | `DeflateInflateLimitRequestBodyvalue`
기본값: | `None, but LimitRequestBody applies after deflation`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
상태: | Extension
모듈: | mod_deflate
지원: | 2.2.28 and later

The documentation for this directive has not been translated yet. Please have a look at the English version.

## DeflateInflateRatioBurst 지시어

설명: | Maximum number of times the inflation ratio for request bodies can be crossed
문법: | `DeflateInflateRatioBurst value`
기본값: | `3`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
상태: | Extension
모듈: | mod_deflate
지원: | 2.2.28 and later

The documentation for this directive has not been translated yet. Please have a look at the English version.

## DeflateInflateRatioLimit 지시어

설명: | Maximum inflation ratio for request bodies
문법: | `DeflateInflateRatioLimit value`
기본값: | `200`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
상태: | Extension
모듈: | mod_deflate
지원: | 2.2.28 and later

The documentation for this directive has not been translated yet. Please have a look at the English version.

## DeflateMemLevel 지시어

설명: | zlib이 압축할때 사용하는 메모리량
문법: | `DeflateMemLevel value`
기본값: | `DeflateMemLevel 9`
사용장소: | 주서버설정, 가상호스트
상태: | Extension
모듈: | mod_deflate

`DeflateMemLevel` 지시어는 zlib이 압축할때 얼마만큼 메모리를 사용할지 결정한다. (1과 9 사이의 값)

## DeflateWindowSize 지시어

설명: | Zlib 압축 window size
문법: | `DeflateWindowSize value`
기본값: | `DeflateWindowSize 15`
사용장소: | 주서버설정, 가상호스트
상태: | Extension
모듈: | mod_deflate

`DeflateWindowSize` 지시어는 zlib 압축 window size를 (1과 15 사이의 값) 지정한다. 일반적으로 window size가 클수록 압축률이 증가한다.

가능한 언어: en | ja | ko

## Comments

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.