About
Ubuntu 14.04 の環境に、nginx + ngx_pagespeed な環境を構築した時の作業メモです。
先日、nginxのMainline版である1.9.5がリリースされましたが、HTTP/2対応が取り込まれたということで、これを機に自鯖(今はSPDY)をHTTP/2デビューさせます!
ちなみに、バックエンドで動かしているphp-fpm(FastCGI)はHTTP/2を喋らないぞ???、と心配になりましたが、結論としては心配無用でした。
公式の解説によると、NginxはHTTP/2のGatewayとして機能し、バックエンドとはHTTP/1.1に変換して喋るようになっているようです。
NGINX acts as an “HTTP/2 gateway” to ease the transition to the new protocol. On the front end, NGINX talks HTTP/2 to client web browsers that support it, and on the back end it talks HTTP/1.x (or FastCGI, uwsgi, SCGI) just as before. In between, NGINX translates between HTTP/2 and HTTP/1.x (or FastCGI, etc). This means that servers and applications proxied by NGINX will be unaffected by the move to HTTP/2, and don’t really even need to know that their clients are using HTTP/2.
前提
- OS: Ubuntu 14.04 LTS
- 追加モジュール
- TLSは対応済みとする
なお、追加モジュール無しで純粋にnginxだけ入れるのであれば、Mainline版のapt sourceが用意されているので、apt経由でインストールするのが楽です(参考)が、今回はngx_pagespeedモジュールを導入するので、ソースからコンパイルしてdebパッケージを構築する方法を採用します。
作業ログ
Nginxのソースと依存パッケージを取得する
先ほどaptは使わないと述べましたが、ソースと依存パッケージの取得だけaptを利用します。
/etc/apt/sources.list
を編集します。
# nginx mainline
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
ソースを取得し、依存パッケージをインストールします。
$ sudo mkdir /opt/nginx
$ cd /opt/nginx
$ sudo apt-get update
$ sudo apt-get build-dep nginx
$ sudo apt-get source nginx
$ ls -1p
nginx-1.9.5/
nginx_1.9.5-1~trusty.debian.tar.gz
nginx_1.9.5-1~trusty.dsc
nginx_1.9.5.orig.tar.gz
今後間違ってapt-get install nginx
としてしまわないようにするため、
/etc/apt/sources.list
から先ほど追加した定義を外しておきます。
# nginx mainline
# deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
# deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
ngx_pagespeedモジュールのソースと依存パッケージを取得する
ngx_pagespeedモジュールの導入に必要な依存パッケージをインストールします。
$ sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
ngx_pagespeedモジュールのソースを取得します。
$ sudo mkdir -p /opt/ngx_pagespeed
$ sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.9.32.6-beta.zip
$ sudo unzip release-1.9.32.6-beta.zip
$ cd ngx_pagespeed-release-1.9.32.6-beta
$ sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz
$ sudo tar -xzvf 1.9.32.6.tar.gz
Nginxのビルド設定を編集する
Nginxのコンパイル時にngx_pagespeedをモジュールとして追加するように設定します。
/opt/nginx/nginx-1.9.5/debian/rules
を編集して、ngx_pagespeedを追加します。
override_dh_auto_build:
...
--with-ipv6 \
# 追加
--add-module=/opt/ngx_pagespeed/ngx_pagespeed-release-1.9.32.6-beta
...
configure_debug:
...
--with-debug \
# 追加
--add-module=/opt/ngx_pagespeed/ngx_pagespeed-release-1.9.32.6-beta
...
コンパイル
$ cd /opt/nginx/nginx-1.9.5
$ sudo dpkg-buildpackage -b
コンパイル成功後、/opt/nginx
にdebファイルが生成されていることが分かります。
なお、インストールすべきdebファイルはnginx_1.9.5-1~trusty_amd64.deb
です。
$ cd /opt/nginx
$ ls -1p
nginx-1.9.5/
nginx-dbg_1.9.5-1~trusty_amd64.deb
nginx-debug_1.9.5-1~trusty_amd64.deb
nginx_1.9.5-1~trusty.debian.tar.gz
nginx_1.9.5-1~trusty.dsc
nginx_1.9.5-1~trusty_amd64.changes
nginx_1.9.5-1~trusty_amd64.deb
nginx_1.9.5.orig.tar.gz
インストール
念のため、設定ファイルのバックアップを取った上で、旧バージョンのdebファイルも用意して、すぐに戻せるようにしておきます。
$ cd /opt/nginx
$ sudo service nginx stop
$ sudo dpkg -i nginx_1.9.5-1~trusty_amd64.deb
$ sudo service nginx start
正常に起動できたら、改めてHTTP/2を有効にして、nginxを再起動します。
server {
...
listen 443 ssl http2;
listen [::]:443 ssl http2;
...
}
$ sudo service nginx restart
HTTP/2 and SPDY indicatorなどで、HTTP/2が有効になっているか確認できます。