Ubuntu 16.04에서 ngx_pagespeed 모듈을 포함한 nginx deb 패키지 컴파일

in #kr6 years ago (edited)

Ubuntu(우분투) 16.04 에서 ngx_pagespeed 모듈을 포함한 deb 패키지를 컴파일 하는 방법이다. nginx.org 에서 배포하는 패키지에는 pagespeed 모듈이 없기 때문에 직접 소스 컴파일 후 nginx를 설치하거나 아래의 방법으로 pagespeed 모듈을 포함한 패키지를 컴파일해서 설치해야 한다. 패키지를 만들게 되면 다른 서버에도 설치할 수 있는 장점이 있다. 아래 과정은 우분투 16.04 Server 환경을 기준으로 한다.

img

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

img

nginx 1.12.2-1.pagespeed 패키지 : https://drive.google.com/file/d/1dz9CRka4289ScPGbWJOBXasnl-8Bkw9x/view?usp=sharing

참고

Sort:  

좋은 정보 감사드립니다.

댓글 남겨주셔서 감사합니다.

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 63510.75
ETH 3065.54
USDT 1.00
SBD 3.82