nginx PageSpeed 連携

Nid: 760




nginx に PageSpeed モジュールを組み込んでセットアップする。Google の Automated Install を使用すると、起動スクリプトや設定ファイル等の準備が大変なので、ここでは手動で deb パッケージを作成する。

1 . 準備

Apache 削除

$ sudo systemctl stop apache2
$ sudo apt-get remove apache2*

nginx を完全に削除

$ sudo apt-get purge nginx nginx-common
$ sudo apt-get autoremove

Ubuntu から nginx をインストールし、設定ファイルを残して削除する。

$ sudo apt-get update && sudo apt-get install nginx
$ sudo apt-get remove nginx nginx-common


$ sudo apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip

2 . Ubuntu リポジトリから nginx をダウンロード

nginx リポジトリの追加

$ wget
$ sudo apt-key add nginx_signing.key
$ sudo vim /etc/apt/sources.list.d/nginx.list
deb xenial nginx
deb-src xenial nginx
$ sudo apt update

nginx をダウンロード

$ cd ~ && mkdir -p ~/new/nginx_source/ && cd ~/new/nginx_source/ 
$ apt-get source nginx
$ ls
nginx-1.11.6/  nginx_1.11.6-1~xenial.debian.tar.xz  nginx_1.11.6-1~xenial.dsc  nginx_1.11.6.orig.tar.gz

'packages cannot be authenticated'のエラーが出る場合は、以下のようにする。

$ sudo rm -rf /var/lib/apt/lists/
$ sudo apt-get update

3 . Pagespeed ダウンロード


$ lynx -dump -nolist | grep latest-stable
latest-stable (BUTTON) …
Marking as latest-stable
$ ngx_version=


$ mkdir -p ~/new/ngx_pagespeed/ && cd ~/new/ngx_pagespeed/
$ wget${ngx_version}
$ unzip release-${ngx_version}
$ cd ngx_pagespeed-release-${ngx_version}-beta/
$ wget${ngx_version}.tar.gz
$ tar -xzvf ${ngx_version}.tar.gz

4 . nginx をビルド


$ vim ~/new/nginx_source/nginx-1.11.6/debian/rules

config.status.nginx: に以下のオプションを追加 前行の末尾に「\」が必要。

直前行(オプション等) \ 

nginx ビルドに必要なパッケージのインストール

$ sudo apt-get build-dep nginx

nginx パッケージのビルド

$ cd ~/new/nginx_source/nginx-1.11.6/
$ dpkg-buildpackage -b


$ cd ..
$ ls *.deb
../nginx_1.11.6-1~xenial_amd64.deb  ../nginx-dbg_1.11.6-1~xenial_amd64.deb

deb パッケージのインストール

$ sudo dpkg -i *.deb

この設定では、末尾に PageSpeed モジュールの組み込みが確認できる

$ nginx -V
nginx version: nginx/1.11.6
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
built with OpenSSL 1.0.2g  1 Mar 2016
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/ --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' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now' --add-module=../../../../ngx_pagespeed/ngx_pagespeed-release-

5 . 動作確認

設定 - http block

$ sudo vim /etc/nginx/nginx.conf
    #include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*; # 仮想ホスト Server Blocks

    # Needs to exist and be writable by nginx.  Use tmpfs for best performance.
    pagespeed FileCachePath /var/ngx_pagespeed_cache;

    pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics;
    pagespeed GlobalAdminPath /pagespeed_global_admin;

設定 - server block

$ sudo vim /etc/nginx/sites-available/default
    pagespeed on;

    # 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 Admin Pages
    location /ngx_pagespeed_statistics { allow; deny all; }
    location /ngx_pagespeed_global_statistics { allow; deny all; }
    location /ngx_pagespeed_message { allow; deny all; }
    location /pagespeed_console { allow; deny all; }
    location ~ ^/pagespeed_admin { allow; deny all; }
    location ~ ^/pagespeed_global_admin { allow; deny all; }
    pagespeed StatisticsPath /ngx_pagespeed_statistics;
    pagespeed MessagesPath /ngx_pagespeed_message;
    pagespeed ConsolePath /pagespeed_console;
    pagespeed AdminPath /pagespeed_admin;

    # PageSpeed statistics
    location ~ "^/pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beacon$" { }

    # PageSpeed Filters 
    pagespeed RewriteLevel CoreFilters;
    pagespeed EnableFilters move_css_above_scripts,move_css_to_head,prioritize_critical_css,inline_preview_images,resize_mobile_images,remove_comments,collapse_whitespace,lazyload_images,insert_dns_prefetch;


$ sudo nginx -t && sudo nginx -s reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx を再起動

$ sudo systemctl restart nginx

このようなメッセージが出たら、umask して再起動。

Failed to restart nginx.service: Unit nginx.service is masked.
$ sudo systemctl unmask nginx
$ sudo systemctl restart nginx

nginx にアクセス。稼働しているnginx および PageSpeedのバージョンが確認できる。

$ curl -I
HTTP/1.1 200 OK
Server: nginx/1.11.6
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding
Date: Wed, 30 Nov 2016 04:38:24 GMT
Cache-Control: max-age=0, no-cache

6 . nginx アップグレードのホールド

apt-get upgrade コマンドで nginx がアップグレードされないようにホールドする。

$ sudo apt-mark hold nginx


$ apt-mark showhold