nginxがHTTP2に対応したので早速インストールしてみた

nginxがHTTP2に対応したので早速インストールしてみた

2015年9月26日 オフ 投稿者: ぱる☆ミ

ついにnginxでもHTTP/2へ対応するアップデートリリースが来ましたよ!!

2015-09-22 nginx-1.9.5 mainline version has been released, featuring experimental HTTP/2 module.

(公式サイトのNewsより)

というわけで、まだmainlineリリースから4日目ですが我がミンキームーンネットワークも最新のプロトコルに対応しますよ!

あ、前提としてhttpsでの通信はSPDYで行われるように既にnginxの設定が出来ている事としています。

さて、今日現在nginxのレポジトリから直接ダウンロードすると

nginx.x86_64 0:1.9.5-1.el6.ngx

をインストールすることが出来ますので、まずは最新版をyum install出来るようにnginx.repoを編集します。
# vi /etc/yum.repos.d/nginx.repo/nginx.repo

[nginx]
name=nginx repo
#baseurl=http://nginx.org/packages/centos/6/$basearch/
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

上記ファイルではbaseurlを修正しました。
次に、sslの設定をしているconfigファイルを編集します。
server {
listen 443 http2;

listenに記入していたspdyをhttps2に書き直す。たったこれだけです。幸いにも私のサイトは小難しい設定を入れていなかったので既存のssl spdy設定部分を書き換えるだけで済みました。

最後にnginxの設定ファイルの書式に問題が無いかを確認して・・・
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

問題が無いのでnginxを再起動しましょう

# /etc/init.d/nginx restart
nginx を停止中: [ OK ]
nginx を起動中: [ OK ]
これでwordpressを動かしているnginxがHTTP/2対応になりました!

本当に対応出来たのかをchromeのHTTP/2 and SPDY indicatorで確認してみます。

http2 enabled!

URL入力バーの右端に青色の稲妻が見えていますね。これがHTTP/2で通信していることを表しています。(ちなみにSPDYで通信した場合は黄緑色の稲妻になります)

アクセスログでもしっかりとHTTP/2で通信出来たことが記録されています

X.X.X.X – – [26/Sep/2015:09:14:45 +0900] “GET / HTTP/2.0” 200 180238 “https://minkymoon.jp/2015/09/26/nginx-spdy-http2-config/” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36” “-“

 

HTTP/2は素のhttpとの通信と同じ程度かそれより速く通信が出来るらしい(未検証)なので、まずはWebサイトの対応だけは進めておくことにします。

せっかくだから常時SSLしてみた

使用しているサーバはさくらのVPS 2Gです。

これも簡単。80番で待ち受けていたnginxはリダイレクトで443番で待ち受けているnginxへ301で転送するようにします。まずは今まで80番で待ち受けていたdefault serverの設定を443化します。

# vi /etc/nginx/conf.d/default.conf
# Default server
server {
listen 80;ここの80を↓のように修正
listen 443 http2;

さらにSSL.confで記述した内容のうちssl_*系の設定をコピー

そして最後に80番でのリダイレクト設定を追加

server {
listen 80;
server_name www.minkymoon.jp;
return 301 https://$host$request_uri;
}

wp-admin直下の動作が怪しいので、そこは調査中・・・