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

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

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

0. 패키지설치

sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev devscripts

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 vim /etc/apt/sources.list
deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx

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

sudo apt update

2. nginx 소스 다운로드

cd /opt
mkdir nginx
cd nginx
sudo apt source nginx

3. ngx_pagespeed 소스 다운로드

NPS_VERSION=1.13.35.2-stable
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v${NPS_VERSION}.zip
unzip v${NPS_VERSION}.zip
nps_dir=$(find . -name "*pagespeed-ngx-${NPS_VERSION}" -type d)
cd "$nps_dir"
NPS_RELEASE_NUMBER=${NPS_VERSION/beta/}
NPS_RELEASE_NUMBER=${NPS_VERSION/stable/}
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.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})  # extracts to psol/

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

cd /opt/nginx/nginx-1.14.1/debian
sudo vim 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/incubator-pagespeed-ngx-1.13.35.2-stable
        touch $@

config.status.nginx 에 추가된 설정은 –add-module=/opt/nginx/incubator-pagespeed-ngx-1.13.35.2-stable 이다.

5. 패키지 버전 변경

cd /opt/nginx/nginx-1.14.1
dch -v 1.14.1-1.pagespeed.1.13.35.2-stable~bionic

dch 명령어를 통해 버전을 변경한다. 여기서는 .pagespeed.1.13.35.2-stable 를 추가했다. dch 명령어를 처음 실행하면 에디터를 선택하는 화면이 표시된다. 에디터 선택 후 debian/changelog 파일이 열린다. 아래 내용을 추가했다.

nginx (1.14.1-1.pagespeed.1.13.35.2-stable~bionic) UNRELEASED; urgency=medium

  * add ngx_pagespeed 1.13.35.2-stable

6. nginx 컴파일을 위한 의존성 패키지 설치

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

7. 패키지 컴파일

sudo cd /opt/nginx/nginx-1.14.1
sudo dpkg-buildpackage -b

컴파일된 deb 파일은 /opt/nginx 디렉토리에 생성된다. deb 파일을 설치하려면 아래 명령을 실행한다.

sudo dpkg -i nginx_1.14.1-1.pagespeed.1.13.35.2-stable~bionic_amd64.deb

nginx 설치 후 nginx -V 명령을 실행해 ngx_pagespeed 모듈이 추가됐는지 확인한다.

nginx version: nginx/1.14.1
built by gcc 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04) 
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 -fdebug-prefix-map=/opt/nginx/nginx-1.14.1-1.pagespeed.1.13.35.2=. -specs=/usr/share/dpkg/no-pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -specs=/usr/share/dpkg/no-pie-link.specs -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-module=/opt/nginx/incubator-pagespeed-ngx-1.13.35.2-stable

마지막에 –add-module=/opt/nginx/incubator-pagespeed-ngx-1.13.35.2-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

결과는 아래와 같이 표시된다. 크롬 개발자 도구에서도 확인할 수 있다.

HTTP/1.1 200 OK
Server: nginx/1.14.1
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding
Date: Wed, 21 Nov 2018 08:18:27 GMT
X-Page-Speed: 1.13.35.2-0
Cache-Control: max-age=0, no-cache

 

참고

편리

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

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

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

    1. 안녕하세요.
      아래와 같은 코드를 shell 상에서 실행했을 때 파일이 정상적으로 다운되는 것을 확인했습니다.

      NPS_VERSION=1.13.35.2-stable
      wget https://github.com/apache/incubator-pagespeed-ngx/archive/v${NPS_VERSION}.zip

      NPS_VERSION 은 https://www.modpagespeed.com/doc/release_notes 페이지를 참고해서 지정해줘야 합니다.

      위 내용은 우분투 18.04 서버버전을 기준을 해서 데스크탑 환경에서는 테스트를 하지 않았습니다. 패키지 누락은 제가 해결할 수 있는 부분이 아닌 것 같습니다.

  1. 안녕하세요 문제가 없을때는 지나치고 감사댓글도 못남겼는데 문제가 생기니 댓글을 달게되네요 ㅋㅋ.. 죄송합니다

    다름이아니라 본글을 보고 PageSpeed Module 을 포함한 nginx 를 설치하여 잘 사용하고있었는데 오늘 업데이트 이후 nginx 가 실행되지않아 에러로그를 열어보니 unknown directive “pagespeed” in /etc/nginx/nginx.conf 이렇게 뜨는데 업데이트가 있을때마다 빌드를 다시 해야하는걸까요?

    1. 안녕하세요.
      nginx 버전업이 있나 보네요.
      버전이 업데이트 된 경우 다시 빌드를 하셔야 합니다.
      또는 모듈만 따로 컴파일해서 로드하는 방법도 있다고 하는데요.
      이 방법을 검색하셔서 적용해 보시는 것도 좋을 것 같습니다.

      1. 아파치인경우는 모듈만 따로 로드가 가능하고 엔진x는 파일통째로 빌드해야한다고 아는데 혹시 관련 링크 달아주실수 있으실까요?

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.