<-
Apache > HTTP Server > Documentation > Version 2.5 > 모듈

아파치 모듈 mod_deflate

가능한 언어:  en  |  fr  |  ja  |  ko 

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.
설명:내용을 클라이언트로 보내기 전에 압축한다
상태:Extension
모듈명:deflate_module
소스파일:mod_deflate.c

요약

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

지시어들

주제

참고

top

견본 설정

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

일부 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>

top

압축하기

출력 압축

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

SetOutputFilter DEFLATE

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

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

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

압축한 파일을 처리하지 못하는 브라우저에게는 압축하지않고 보내길위해 BrowserMatch 지시어에 no-gzip을 설정한다. 최적의 결과를 얻기위해 no-gzipgzip-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)에 영향을 주지 않는다.

주의

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

출력 압축풀기

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

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

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

입력 압축풀기

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

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

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

Content-Length에 대한 주의

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

top

프록시 서버 다루기

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

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

Header append Vary User-Agent

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

예제

Header set Vary *

top

DeflateBufferSize 지시어

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

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

top

DeflateCompressionLevel 지시어

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

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

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

top

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

참고

top

DeflateMemLevel 지시어

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

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

top

DeflateWindowSize 지시어

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

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

가능한 언어:  en  |  fr  |  ja  |  ko 

top

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.