nginx + ngx_pagespeed
꽤나 예전에 동아리 서버에는 적용해봤는데 — 동아리 서버는 apache 웹서버를 써서 구글에서 바이너리로 배포하는 mod_pagespeed
를 썼지만 — 이 블로그가 쓰는 웹 서버는 nginx를 써서 적용 못하고 있었다.
Nginx 는 다 좋은데 동적으로 로드 가능한 모듈을 지원하질 않아서 소스에 넣고 빌드해줘야하는 것. 개인 웹 서버라 개발툴 없이 돌리는 상태를 유지하고 싶어서 회사 개발머신을 빌려 데비안 패키지만 만들고 옮겨서 설치하는 것으로. 아래는 그 기록.
빌드 기록
빌드 과정은 소스에서 ngx_pagespeed 빌드하기 를 따라하되 nginx 소스코드와 빌드 자체는 ubuntu 14.04의 debian 빌드 스크립트를 이용했다.
소스 코드 얻기
nginx 소스 패키지와 ngx_pagespeed
소스 타르볼, 그리고 PSOL 타르볼을 얻는다:
# nginx (1.4.6) 소스코드 + 빌드스크립트
$ apt-get source nginx
# ngx_pagespeed 릴리즈 아카이브
$ wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.9.32.10-beta.zip
# PSOL
$ wget https://dl.google.com/dl/page-speed/psol/1.9.32.10.tar.gz
# 압축 해제 및 필요한 구조로 변경
$ tar -zxf 1.9.32.10.tar.gz
$ unzip release-1.9.32.10-beta.zip
# PSOL 을 ngx_pagespeed 밑으로
$ mv psol/ ngx_pagespeed-release-1.9.32.10-beta/
# ngx_pagespeed 를 모듈 디렉터리로 이전
$ mv ngx_pagespeed-release-1.9.32.10-beta/ nginx-1.4.6/debian/modules/
nginx 빌드룰 수정
데비안 패키지의 빌드룰은 “{패키지-버전}/debian/rules” 에 있다. 여기선 nginx-1.4.6/debian/rules
를 열어 nginx-full
에 해당하는 config.status.full
항의 맨 뒤에 --add-module=$(MODULESDIR)/ngx_pagespeed-release-1.9.32.10-beta
를 추가해서 아래와 같이 수정한다:
config.status.full: config.env.full
cd $(BUILDDIR_full) && ./configure \
$(common_configure_flags) \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_spdy_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-mail \
--with-mail_ssl_module \
--add-module=$(MODULESDIR)/nginx-auth-pam \
--add-module=$(MODULESDIR)/nginx-dav-ext-module \
--add-module=$(MODULESDIR)/nginx-echo \
--add-module=$(MODULESDIR)/nginx-upstream-fair \
--add-module=$(MODULESDIR)/ngx_http_substitutions_filter_module \
--add-module=$(MODULESDIR)/ngx_pagespeed-release-1.9.32.10-beta \
>$@
데비안 패키지 생성
$ debuild -uc -us -rfakeroot -b
$ ls -1 ../*.deb
../nginx-common_1.4.6-1ubuntu3.3_all.deb
../nginx-core-dbg_1.4.6-1ubuntu3.3_amd64.deb
../nginx-core_1.4.6-1ubuntu3.3_amd64.deb
../nginx-doc_1.4.6-1ubuntu3.3_all.deb
../nginx-extras-dbg_1.4.6-1ubuntu3.3_amd64.deb
../nginx-extras_1.4.6-1ubuntu3.3_amd64.deb
../nginx-full-dbg_1.4.6-1ubuntu3.3_amd64.deb
../nginx-full_1.4.6-1ubuntu3.3_amd64.deb
../nginx-light-dbg_1.4.6-1ubuntu3.3_amd64.deb
../nginx-light_1.4.6-1ubuntu3.3_amd64.deb
../nginx-naxsi-dbg_1.4.6-1ubuntu3.3_amd64.deb
../nginx-naxsi-ui_1.4.6-1ubuntu3.3_all.deb
../nginx-naxsi_1.4.6-1ubuntu3.3_amd64.deb
../nginx_1.4.6-1ubuntu3.3_all.deb
적당히 기다리고 나면 탑 디렉터리에 .deb 파일 수 개가 생긴다. 위에서 빌드 룰 수정한 nginx-full
패키지를 가져가서 서버에 설치.1 빌드 시간을 줄이고 싶다면 debian/control
을 수정하는 것도 다음 번엔 고려해야겠다.
설정하기
ngx_pagespeed : Nginx의 PageSpeed 모듈 :: Outsider’s Dev Story 를 참조해서 설정했다. 기본 값 + JavaScript 비동기 로딩 정도 설정함.
총평
Google PageSpeed Insight 점수가 15점 쯤 올랐다. 대신 앞으론 ubuntu 쪽 패키지 업데이트 / Google 쪽 릴리즈 마다 새로 빌드해야한다 (이쪽은 전혀 달갑지 않다.)
PS. (아마도) GPL인 debian/rules 파일을 일부 인용했는데, 이 글 라이센스를 CC-BY 대신 GFDL로 해야하나? 아니면 공정 사용이니 그냥 CC-BY 해도되나?
-
빌드할 때 너무 오래 걸리는데,
-j8
줘서 병렬 빌드하면 실패한다. 빌드 스크립트에 뭔가 문제가 있는가? ↩︎