Ubuntu(우분투) 16.04 에서 ngx_pagespeed 모듈을 포함한 deb 패키지를 컴파일 하는 방법이다. nginx.org 에서 배포하는 패키지에는 pagespeed 모듈이 없기 때문에 직접 소스 컴파일 후 nginx를 설치하거나 아래의 방법으로 pagespeed 모듈을 포함한 패키지를 컴파일해서 설치해야 한다. 패키지를 만들게 되면 다른 서버에도 설치할 수 있는 장점이 있다. 아래 과정은 우분투 16.04 Server 환경을 기준으로 한다.
Google PageSpeed Module : https://developers.google.com/speed/pagespeed/module/
nginx 저장소 추가
nginx.org에서 제공하는 우분투 저장소를 설정한다.
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
사인키 설치 후 /etc/apt/sources.list 파일에 아래 저장소 설정을 추가한다. nano 에디터를 사용한다면 아래와 같이 입력한다.
sudo nano /etc/apt/sources.list
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
로컬 패키지 인덱스를 업데이트 한다.
sudo apt update
nginx 소스 다운로드
cd /opt
mkdir nginx
cd nginx
sudo apt source nginx
ngx_pagespeed 소스 다운로드
wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.3-stable.zip
unzip v1.12.34.3-stable.zip
rm v1.12.34.3-stable.zip
cd ngx_pagespeed-1.12.34.3-stable/
psol_url=https://dl.google.com/dl/page-speed/psol/1.12.34.3.tar.gz
[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget ${psol_url}
tar -xzvf $(basename ${psol_url})
rm $(basename ${psol_url})
모듈 컴파일을 위한 설정추가
cd /opt/nginx/nginx-1.12.2/debian
sudo nano rules
rules 파일에 아래와 같이 ngx_pagespeed 모듈의 경로를 지정한다.
config.status.nginx: config.env.nginx
cd $(BUILDDIR_nginx) && \
CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --add-module=/opt/nginx/ngx_pagespeed-1.12.34.3-stable
touch $@
config.status.nginx 에 추가된 설정은 --add-module=/opt/nginx/ngx_pagespeed-1.12.34.3-stable 이다.
패키지 버전 변경
cd /opt/nginx/nginx-1.12.2
dch -v 1.12.2-1.pagespeed~xenial
dch 명령어를 통해 버전을 변경한다. 여기서는 .pagespeed 를 추가했다. dch 명령어를 처음 실행하면 에디터를 선택하는 화면이 표시된다. 에디터 선택 후 debian/changelog 파일이 열린다. 아래 내용을 추가했다.
nginx (1.12.2-1.pagespeed~xenial) UNRELEASED; urgency=medium
* ngx_pagespeed added
dch 명령어가 없다면 아래 명령어로 devscripts 패키지를 설치한다.
sudo apt-get install devscripts
컴파일을 위한 패키지 설치
sudo cd /opt/nginx/nginx-1.12.2
sudo apt-get build-dep nginx
패키지 컴파일
sudo cd /opt/nginx/nginx-1.12.2
sudo dpkg-buildpackage -b
컴파일된 deb 파일은 /opt/nginx 디렉토리에 생성된다. deb 파일을 설치하려면 아래 명령을 실행한다.
sudo apt install ./nginx_1.12.2-1.pagespeed~xenial_amd64.deb
만약 nginx가 이미 설치되어 있어 다시 설치하는 경우는 아래 명령을 실행한다.
sudo apt install --reinstall ./nginx_1.12.2-1.pagespeed~xenial_amd64.deb
nginx 설치 후 nginx -V 명령을 실행해 ngx_pagespeed 모듈이 추가됐는지 확인한다.
nginx version: nginx/1.12.2
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
built with OpenSSL 1.1.0g 2 Nov 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-module=/opt/nginx/ngx_pagespeed-1.12.34.3-stable
마지막에 --add-module=/opt/nginx/ngx_pagespeed-1.12.34.3-stable 가 추가된 것을 확인할 수 있다.
ngx_pagespeed 모듈 설정
sudo mkdir -p /var/ngx_pagespeed_cache
sudo chown -R www-data:www-data /var/ngx_pagespeed_cache
캐시를 저장할 디렉토리를 생성하고 소유권을 nginx에서 접근할 수 있도록 변경한다. 위에서는 nginx의 유저가 www-data인 경우이다.
# enable pagespeed module on this server block
pagespeed on;
# Needs to exist and be writable by nginx. Use tmpfs for best performance.
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters collapse_whitespace,remove_comments;
위 설정은 ngx_pagespeed 모듈을 적용하고자하는 사이트의 server 블럭에 추가한다. 설정 추가 후 nginx -t 명령을 실행 설정에 오류가 있는지 확인하고 오류가 없으면 nginx를 reload 한다.
sudo service nginx reload
아래 명령을 실행해 pagespeed 헤더가 있는지 체크한다.
curl -I -p http://localhost | grep X-Page-Speed
결과는 아래와 같이 표시된다. 크롬 개발자 도구에서도 확인할 수 있다.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
X-Page-Speed: 1.12.34.3-0
nginx 1.12.2-1.pagespeed 패키지 : https://drive.google.com/file/d/1dz9CRka4289ScPGbWJOBXasnl-8Bkw9x/view?usp=sharing
참고
좋은 정보 감사드립니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
댓글 남겨주셔서 감사합니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit