nginx
Ubuntu
http2

nginx 1.9.5 + ngx_pagespeed on Ubuntu 14.04 の導入とHTTP/2の設定

More than 3 years have passed since last update.


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を編集します。


/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から先ほど追加した定義を外しておきます。


/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を追加します。


/opt/nginx/nginx-1.9.5/debian/rules

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を再起動します。


/etc/nginx/conf.d/default_ssl.conf

server {

...
listen 443 ssl http2;
listen [::]:443 ssl http2;
...
}

$ sudo service nginx restart

HTTP/2 and SPDY indicatorなどで、HTTP/2が有効になっているか確認できます。


参考