Apache HTTP Server Version 2.4

아파치 모듈 mod_deflate
| 설명: | 내용을 클라이언트로 보내기 전에 압축한다 |
|---|---|
| 상태: | Extension |
| 모듈명: | deflate_module |
| 소스파일: | mod_deflate.c |
요약
mod_deflate 모듈은 서버의 출력을 네트웍으로
클라이언트에 보내기 전에 압축하는 DEFLATE 출력필터를
제공한다.
견본 설정
급한 사람을 위한 견본 설정이다.
일부 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)에 영향을
주지 않는다.
출력 압축풀기
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
참고
DeflateInflateLimitRequestBody 지시어
| 설명: | Maximum size of inflated request bodies |
|---|---|
| 문법: | DeflateInflateLimitRequestBodyvalue |
| 기본값: | None, but LimitRequestBody applies after deflation |
| 사용장소: | 주서버설정, 가상호스트, directory, .htaccess |
| 상태: | Extension |
| 모듈: | mod_deflate |
| 지원: | 2.4.10 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.4.10 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.4.10 and later |
The documentation for this directive has not been translated yet. Please have a look at the English version.


