nginxをhttp2に対応させる

以前に構築したDockerでの開発環境で使ったnginxをhttp2に対応させた時のメモ。

過去の記事(Dockerでの開発環境

環境

ベースは前回構築したnginx+Dockerで通信はオレオレ証明書によるSSLを前提。

主な変更点は以下の通り

いずれもhttp2対応させる為にバージョンアップが必要。

なお、iOSはiOS9からhttp2へ対応している。

手順

事前準備

http2での通信かどうかの確認用に以下のChromeのプラグインを入れておく。

HTTP/2 and SPDY indicator
(Firefox用もあるみたいなのでお好きな方で)

http2での通信だと稲妻が青色になるので確認が楽。

Macでの作業

  1. OpenSSLを最新にあげる
    OpenSSLの更新方法:Mac OS X の openssl を最新の状態にする
    ポイントはupgradeにすること(普段使うupdateではない)

  2. nginxをアンイストールする

    brew uninstall nginx
    
  3. nginxをhttp2モジュール付きでインストールする

    brew install nginx --with-http2
    
  4. nginxのconfを編集
    HTTPS serverの設定がlisten 443 ssl;となっているはずなので、http2を追加する。

    server {
    listen  443 ssl http2;
    ...
    }
    

    追加したらnginxを再起動する

  5. ChromeからMacへアクセスしてみて青い稲妻になっていればnginxの設定は成功

iOS端末での通信

iOS9以降のNSURLSessionでの通信であれば、特に設定など不要で自動でhttp2になる。

なお、規格上はhttpのみでも対応しているがiOSでどうかは未検証。

ログ設定

iOS端末からの通信もhttp2になっているかの確認は、nginxのログで判別する。

http2の場合は、log_format$http2h2と入ってくる。
詳細は以下のページを参考に
nginxでアクセスログにhttp2の通信か出力する

過去情報

標準のnginxhttp2モジュールがないと思っていたら、 実はちゃんとあったので訂正。

もったいないので、nginx-fullの情報を残しておく。

nginx-full

通常のHomebrewnginxではオプションのモジュールが少ないので、 標準では足りないモジュールをインストールしたい時はnginx-fullをインストールする。

例) nginxをhttp2モジュール付きでインストールする

brew tap homebrew/nginx
brew install nginx-full --with-http2

モジュールの一覧は以下で確認すること。 (公式のモジュールの情報?とは違うようなのでこれで確認)

brew info nginx-full

参考リンク

開発環境