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

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

Google PageSpeed Module : https://developers.google.com/speed/pagespeed/module/

1. 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/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

로컬 패키지 인덱스를 업데이트 한다.

sudo apt update

2. nginx 소스 다운로드

cd /opt
mkdir nginx
cd nginx
sudo apt source nginx

3. 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})

4. 모듈 컴파일을 위한 설정추가

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 이다.

5. 패키지 버전 변경

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

6. 컴파일을 위한 패키지 설치

sudo cd /opt/nginx/nginx-1.12.2
sudo apt-get build-dep nginx

7. 패키지 컴파일

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 가 추가된 것을 확인할 수 있다.

8. 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

참고

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

카카오톡 플러스친구 채팅 : NCUBE.NET

5 thoughts to “Ubuntu 16.04에서 ngx_pagespeed 모듈을 포함한 nginx deb 패키지 컴파일”

  1. 안녕하세요 좋은 정보 정말 감사합니다.
    이미 /etc 에 nginx 최선버전이 깔려 있고 업데이트가 되고 있어서 그런지
    따라하다가 에러가 나서 결국 포기하게 되었습니다.
    혹시 저같은 경우 어떻게 해야 하는지 좀 알려주실 수 있으실까요?
    감사합니다.

    1. 안녕하세요.

      오류가 어떤 과정에서 발생하는지, 오류 메세지는 무엇인지 등에 대한 정보가 없는 상태에서는 답변을 드릴 수가 없습니다.

      1. 아 죄송합니다.
        제가 너무 막연하게 질문을 드렸군요
        기존에 nginx최선이 설치되어 있습니다.

        1.그런데 위처럼 또 nginx 를 opt폴더에다가 다운로드 받나요?

        2. nginx 버전이 변경되어서 폴더명이 변경되었는데 폴더명만 바꿔서 진행해도 될까요?
        가령 nginx-1.12.2 는 nginx-1.13.8로 변경되었습니다.

        3. rules에 –add-module=/opt/nginx/ngx_pagespeed-1.12.34.3-stable 이거를 추가할 때 최신
        버전이면 폴더명이 바뀔 수 있을까요?

        초보라서 어리석은 질문으로 귀찮게 해드려서 정말 죄송합니다.
        새해 복 많이 받으세요

        1. 1. 위의 과정은 설치하신 최신 버전의 nginx 소스를 다운받아 pagespeed 모듈을 추가해서 새로 컴파일하기 위해 필요합니다.

          2. 버전이 바뀌면 디렉토리명이 변경됩니다.

          3. pagespeed 모듈 버전이 바뀌면 디렉토리명 또한 변경됩니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.