Lighttpd 1.4 (Debian Etch)에서 mod_deflate로 트래픽 절약하는 방법
중요: 이 튜토리얼은 데비안 Etch(예: lighttpd 1.4.13)를 기준으로 작성되었습니다. 최신 배포판이나 lighttpd 1.5 이상에서는 mod_deflate가 기본 포함되어 있을 수 있으니 먼저 버전을 확인하세요.
목적 및 관련 검색 의도
- 주된 목적: lighttpd 1.4에서 mod_deflate를 적용해 서버 트래픽을 줄이는 방법 안내
- 관련 검색 변형: lighttpd mod_deflate 설치, lighttpd gzip 설정, Debian Etch lighttpd 압축, HTTP 응답 압축 설정, mod_compress 대 mod_deflate
1 개요
이 문서는 Debian Etch에 포함된 lighttpd 1.4 계열(예: 1.4.13)을 대상으로 mod_deflate 패치를 적용해 빌드하고, 설정(Configuration) 및 검증(Verification)까지 완료하는 절차를 설명합니다. mod_deflate는 정적 파일뿐 아니라 PHP 등 동적 컨텐츠도 압축할 수 있다는 점에서 mod_compress보다 장점이 있습니다. 압축은 서버 CPU 부하를 약간 증가시키지만 대역폭 절감과 클라이언트 응답 시간 단축으로 대부분의 환경에서 이득이 큽니다.
용어 정의(한 줄):
- mod_deflate: HTTP 응답 바디를 gzip/bzip2 형식으로 압축하여 전송하는 lighttpd 플러그인.
- mod_compress: 정적 파일만 압축 가능한 이전 플러그인.
2 사전 확인
- 이미 lighttpd가 설치되어 있는지와 버전을 확인합니다:
lighttpd -V출력 예시는 다음과 같아야 하며, 버전이 1.4.13인지 확인하십시오:
server1:~# lighttpd -V
lighttpd-1.4.13 (ssl) - a light and fast webserver
Build-Date: Jun 1 2007 18:19:33
Event Handlers:
+ select (generic)
+ poll (Unix)
+ rt-signals (Linux 2.4+)
+ epoll (Linux 2.6)
- /dev/poll (Solaris)
- kqueue (FreeBSD)
Network handler:
+ sendfile
Features:
+ IPv6 support
+ zlib support
+ bzip2 support
+ crypt support
+ SSL Support
+ PCRE support
+ mySQL support
+ LDAP support
+ memcached support
- FAM support
+ LUA support
+ xml support
+ SQLite support
+ GDBM support
server1:~#참고: lighttpd 1.5 이상에서는 mod_deflate가 기본 포함되어 있으므로 별도 패치가 불필요합니다.
3 소스 패치 및 빌드 절차
다음 단계는 소스 패치와 .deb 패키지 재빌드입니다. 시스템에 따라 루트 권한이 필요합니다.
- 빌드에 필요한 도구 설치:
apt-get install build-essential- 소스 디렉터리로 이동해 데비안 소스 패키지 가져오기:
cd /usr/src
apt-get source lighttpd- 디렉터리 목록 확인(예: lighttpd-1.4.13):
ls -l- mod_deflate 패치 다운로드 및 적용:
wget http://trac.lighttpd.net/trac/attachment/wiki/Mod_Deflate/lighttpd-1.4.13.mod_deflate.jz.patch?format=raw
mv lighttpd-1.4.13.mod_deflate.jz.patch?format=raw lighttpd-1.4.13.mod_deflate.jz.patch
cd lighttpd-1.4.13
patch -p1 < ../lighttpd-1.4.13.mod_deflate.jz.patch패치 성공 시 패치 로그(파일명이 나열됨)를 확인하십시오.
- 패키지 빌드 시 필요한 의존성 설치 및 빌드:
먼저 dpkg-buildpackage를 실행하면 부족한 빌드 의존성이 나옵니다. 예시:
dpkg-buildpackage부족한 패키지를 아래 예와 같이 설치합니다(환경에 따라 목록이 다를 수 있음):
apt-get install debhelper cdbs libssl-dev zlib1g-dev libbz2-dev libattr1-dev libpcre3-dev libmysqlclient15-dev libldap2-dev libfcgi-dev libgdbm-dev libmemcache-dev liblua5.1-0-dev dpatch patchutils pkg-config uuid-dev libsqlite3-dev libxml2-dev그 후 다시 패키지 빌드:
dpkg-buildpackage빌드가 완료되면 /usr/src에 .deb 파일(예: lighttpd_1.4.13-4etch1_i386.deb)이 생성됩니다.
- 새 패키지 설치 및 모듈 복사:
dpkg -i lighttpd_1.4.13-4etch1_i386.deb
cp /usr/src/lighttpd-1.4.13/debian/tmp/usr/lib/lighttpd/mod_deflate.so /usr/lib/lighttpd설치 후 빌드 날짜로 재설치가 제대로 되었는지 확인할 수 있습니다:
lighttpd -V출력에 bzip2 지원 등이 표시되면 모듈 동작 전제(요구사항)는 충족됩니다.
4 Lighttpd 설정
데비안 Etch의 기본 설정 파일은 /etc/lighttpd/lighttpd.conf 입니다. 다음과 같이 server.modules에 mod_deflate를 추가합니다. (참고: mod_rewrite가 활성화된 경우 mod_deflate는 mod_rewrite 뒤에 위치해야 합니다.)
vi /etc/lighttpd/lighttpd.conf| [...] server.modules = ( "mod_access", "mod_alias", "mod_accesslog", "mod_fastcgi", # "mod_rewrite", "mod_deflate", # "mod_redirect", # "mod_status", # "mod_evhost", # "mod_compress", # "mod_usertrack", # "mod_rrdtool", # "mod_webdav", # "mod_expire", # "mod_flv_streaming", # "mod_evasive" ) [...] |
같은 파일 끝부분(또는 적절한 위치)에 다음 deflate 설정을 추가합니다:
| [...] deflate.enabled = "enable" deflate.compression-level = 9 deflate.mem-level = 9 deflate.window-size = 15 # deflate.bzip2 only in patch for 1.4.x deflate.bzip2 = "enable" # deflate.allowed_encodings only in 1.5.x #deflate.allowed_encodings = ( "bzip2", "gzip", "deflate" ) deflate.min-compress-size = 200 #deflate.sync-flush = "enable" deflate.output-buffer-size = 4096 deflate.work-block-size = 512 deflate.mimetypes = ("text/html", "text/plain", "text/css", "text/javascript", "text/xml") #deflate.debug = "enable" |
설정 후 lighttpd 재시작:
/etc/init.d/lighttpd restartblank 페이지가 보일 경우 deflate.output-buffer-size 값을 2048 또는 1024로 낮춰 재시작해 보십시오.
5 동작 검증
압축 동작을 확인하려면 deflate.debug = “enable”을 uncomment하고 lighttpd를 재시작한 후 에러 로그를 모니터링합니다:
tail -f /var/log/lighttpd/error.log압축이 수행되면 로그에 다음과 유사한 항목이 나타납니다:
2007-08-08 18:40:33: (mod_deflate.c.919) in: 53875 out: 8446
2007-08-08 18:40:33: (mod_deflate.c.1020) finished uri: /info.php , query:이 예시는 53,875바이트인 info.php가 8,446바이트로 압축되었음을 의미합니다.
6 점검표(롤별)
관리자(시스템·서버 운영자):
- lighttpd 버전 확인 및 백업
- 소스 빌드 환경(의존성) 설치
- .deb 빌드 및 설치 후 서비스 재시작
개발자(웹 개발자):
- 콘텐츠가 압축과 호환되는지 확인(이미 압축된 바이너리 응답 전송 금지)
- Content-Type 헤더가 올바른지 확인
QA 엔지니어:
- 브라우저에서 압축 협상(accept-encoding) 테스트
- 압축 전/후 응답 무결성 검사
7 문제 해결 및 주의점
- 일부 오래된 브라우저가 압축을 제대로 처리하지 못할 가능성이 있으나, HTTP 헤더 협상을 통해 서버가 자동으로 압축 전송 여부를 결정하므로 대개 문제가 없습니다.
- blank 페이지가 발생하면 deflate.output-buffer-size 값을 줄여 테스트하세요.
- CPU 사용량 증가: 트래픽 절감 효과가 큰 경우가 대부분이지만, CPU 한계가 있는 환경에서는 오프로드 솔루션(리버스 프록시, CDN)을 고려하세요.
8 대안과 비교
- mod_compress: lighttpd 1.4 기본 플러그인으로 정적 파일만 압축 가능. 동적 파일(예: PHP) 압축이 필요하면 mod_deflate가 유리.
- nginx(또는 Apache mod_deflate): 최신 웹서버로 전환하면 내장된 gzip/brotli 압축 기능 활용 가능.
- 리버스 프록시(CDN) 사용: 압축과 캐싱을 외부로 위임하면 서버 부하를 낮출 수 있음.
비교 요약: mod_deflate는 기존 1.4 계열에서 동적 컨텐츠까지 압축하는 실용적인 선택지입니다. 하지만 장기적으로는 최신 경량 웹서버 또는 CDN 도입을 검토하는 것이 좋습니다.
9 테스트 케이스 및 승인 기준
- 브라우저에서 curl로 Accept-Encoding 헤더를 포함해 요청 시 Content-Encoding이 gzip 또는 bzip2로 전송되는지 확인:
curl -I -H "Accept-Encoding: gzip,deflate" http://yourserver/yourpage.html- 압축된 응답을 실제로 풀었을 때(예: gunzip) 원래 파일과 동일한지 검증.
- deflate.min-compress-size 이하의 작은 파일은 압축되지 않는지 확인.
승인 기준:
- 최소 3개의 HTML/PHP 페이지가 압축되어 응답 크기가 현저히 감소할 것
- 압축 유무에 따른 페이지 렌더링 오류 없음
- 서버 에러 로그에 mod_deflate 관련 치명적 에러 없음
10 팁과 체크리스트(빠른 요약)
- 먼저 버전 확인: lighttpd -V
- 필요 패키지 설치: build-essential 및 dpkg-buildpackage 의존성
- 패치 다운로드 및 적용: patch -p1
- 빌드: dpkg-buildpackage
- 설치: dpkg -i …
- 모듈 복사: cp …/mod_deflate.so /usr/lib/lighttpd
- 설정: server.modules에 “mod_deflate” 추가 및 deflate.* 옵션 설정
- 검증: deflate.debug 활성화 후 /var/log/lighttpd/error.log 확인
11 호환성 및 마이그레이션 팁
- 데비안 Etch(구버전)에서 작업 중이라면 보안 업데이트 및 패키지 지원 기간을 고려하세요. 가능하다면 최신 Debian으로 마이그레이션을 권장합니다.
- lighttpd 1.5 이상으로 업그레이드하면 mod_deflate가 기본 포함되므로 소스 패치/재빌드가 불필요합니다.
- Brotli 압축을 사용하려면 서버 소프트웨어가 brotli를 지원하는지 확인하세요(추가 모듈 또는 최신 서버 필요).
12 보안 및 개인정보 주의
압축 자체는 개인정보에 직접 영향을 주지 않지만, 압축된 응답을 통해 전송되는 모든 데이터는 평상시와 동일한 보안(HTTPS, 적절한 헤더) 정책을 따라야 합니다. SSL/TLS를 사용하는 경우 압축 전에 반드시 TLS 레벨에서 적절한 설정을 검토하세요(과거 CRIME 취약점 관련 문맥에서 압축+TLS 조합에 유의 필요).
13 자주 묻는 질문(짧게)
Q: 모든 파일이 압축되나요? A: deflate.mimetypes와 deflate.min-compress-size에 따라 지정된 MIME 타입과 크기 이상의 파일만 압축됩니다.
Q: 모듈이 보이지 않으면? A: lighttpd -V 출력에 mod_deflate 항목이 직접 표시되지 않을 수 있으나, 모듈 파일(mod_deflate.so)이 /usr/lib/lighttpd에 있고 서버 로그에 압축 관련 로그가 있으면 정상 동작합니다.
14 마무리 요약
- mod_deflate 패치는 lighttpd 1.4에서 동적/정적 콘텐츠 압축을 가능하게 하여 대역폭을 크게 절감합니다.
- 소스 패치 → 의존성 설치 → dpkg-buildpackage → .deb 설치 → 설정 → 검증 순으로 진행합니다.
- 문제 발생 시 출력 로그와 설정값(deflate.output-buffer-size 등)을 먼저 확인하세요.
링크
- Lighttpd: http://www.lighttpd.net
- mod_deflate: http://trac.lighttpd.net/trac/wiki/Mod_Deflate
- Debian: http://www.debian.org