nginx 1.9.5以降から標準でHTTP/2に対応している*1のでHTTPSなownCloudに対して対応してみた。さすがにownCloudクライアントはHTTP/2には対応していないけど。
バージョンは問題ないか?
Ubuntuの場合、PPAのstableレポジトリ(1.8.0)でnginxをインストールしている場合は(執筆時点で)1.9.7が配信されているdevelopmentレポジトリを追加してupdate→upgrade後stableレポジトリを削除する。
$ sudo add-apt-repository ppa:nginx/development $ sudo apt-get update $ sudo apt-get upgrade $ sudo add-apt-repository -r ppa:nginx/stable $ sudo apt-get update #←念の為
シンプル設定
nginxでの設定はlistenのオプションにhttp2を入れるだけというシンプルさ。
$ sudo vi /etc/nginx/sites-available/example listen 443 ssl; listen [::]:443 ssl; #↓ listen 443 ssl http2; listen [::]:443 ssl http2;
入れたあとはreloadするのをお忘れなく。
$ sudo nginx -s reload
確認
実際にHTTP/2で通信されているかどうかはHTTPログやブラウザのデベロッパーツール(記事画像はFirefoxのデベロッパーツールで確認した時の様子)の他、ChromeであればHTTP/2 and SPDY indicatorを入れることで確認することが可能。アドレスバーの右側に青色の稲妻アイコンが出ていればHTTP/2で通信している。
(ゴニョゴニョ) - - [13/Dec/2015:16:59:10 +0900] "GET /index.php/apps/files/ HTTP/2.0" 200 17582 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36"
ちなみに
この記事を書く数日前にHTTP/2の対応設定を行ったのだが、当時設定後sudo nginx -s reloadしてワーカープロセスの再起動をしていなかった(先日の記事参照)ので「んーだめっぽい?」と思い込み、いろいろ調べてPPAで配信されているPHP5.6を入れたり(OpenSSLも配信されている)してもダメだったので放っておいた。が、先日reloadしたタイミングから?HTTP/2でつながるようになった模様。reloadでワーカープロセス再起動マジ大事。
*1:正確にはconfigure時に--with-http_v2_moduleが必要っぽい?