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 http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key
$ sudo vim /etc/apt/sources.list.d/nginx.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 ~ && 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 https://github.com/pagespeed/ngx_pagespeed/releases | grep latest-stable
latest-stable (BUTTON) …
Marking 1.11.33.4 as latest-stable
$ ngx_version=1.11.33.4

ダウンロード

$ mkdir -p ~/new/ngx_pagespeed/ && cd ~/new/ngx_pagespeed/
$ wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${ngx_version}-beta.zip
$ unzip release-${ngx_version}-beta.zip
$ cd ngx_pagespeed-release-${ngx_version}-beta/
$ wget https://dl.google.com/dl/page-speed/psol/${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: に以下のオプションを追加 前行の末尾に「\」が必要。

直前行(オプション等) \ 
--add-module=../../../../ngx_pagespeed/ngx_pagespeed-release-1.11.33.4-beta 

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/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' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now' --add-module=../../../../ngx_pagespeed/ngx_pagespeed-release-1.11.33.4-beta

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 127.0.0.1; deny all; }
    location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
    location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
    location /pagespeed_console { allow 127.0.0.1; deny all; }
    location ~ ^/pagespeed_admin { allow 127.0.0.1; deny all; }
    location ~ ^/pagespeed_global_admin { allow 127.0.0.1; 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 127.0.0.1
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
X-Page-Speed: 1.11.33.4-0
Cache-Control: max-age=0, no-cache

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

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

$ sudo apt-mark hold nginx

アップグレードをホールドしているパッケージの確認。

$ apt-mark showhold
nginx