nginxをhttp2に対応させる
Jun 3, 2016 · iOS · mac · serverdockerphpdbnginxsslhttp2
以前に構築したDockerでの開発環境で使ったnginxをhttp2
に対応させた時のメモ。
過去の記事(Dockerでの開発環境)
環境
ベースは前回構築したnginx+Dockerで通信はオレオレ証明書によるSSLを前提。
主な変更点は以下の通り
- OpenSSL 1.0.2
- nginx 1.10.0
いずれもhttp2対応させる為にバージョンアップが必要。
なお、iOSはiOS9からhttp2へ対応している。
手順
事前準備
http2での通信かどうかの確認用に以下のChromeのプラグインを入れておく。
HTTP/2 and SPDY indicator
(Firefox用もあるみたいなのでお好きな方で)
http2での通信だと稲妻が青色になるので確認が楽。
Macでの作業
OpenSSLを最新にあげる
OpenSSLの更新方法:Mac OS X の openssl を最新の状態にする
ポイントはupgrade
にすること(普段使うupdate
ではない)nginxをアンイストールする
brew uninstall nginx
nginxをhttp2モジュール付きでインストールする
brew install nginx --with-http2
nginxのconfを編集
HTTPS server
の設定がlisten 443 ssl;
となっているはずなので、http2
を追加する。server { listen 443 ssl http2; ... }
追加したらnginxを再起動する
ChromeからMacへアクセスしてみて青い稲妻になっていれば
nginx
の設定は成功
iOS端末での通信
iOS9以降のNSURLSession
での通信であれば、特に設定など不要で自動でhttp2
になる。
なお、規格上はhttp
のみでも対応しているがiOSでどうかは未検証。
ログ設定
iOS端末からの通信もhttp2
になっているかの確認は、nginx
のログで判別する。
http2
の場合は、log_format
の$http2
にh2
と入ってくる。
詳細は以下のページを参考に
nginxでアクセスログにhttp2の通信か出力する
過去情報
標準のnginx
にhttp2
モジュールがないと思っていたら、
実はちゃんとあったので訂正。
もったいないので、nginx-full
の情報を残しておく。
nginx-full
通常のHomebrew
のnginx
ではオプションのモジュールが少ないので、
標準では足りないモジュールをインストールしたい時はnginx-full
をインストールする。
例) nginxをhttp2モジュール付きでインストールする
brew tap homebrew/nginx
brew install nginx-full --with-http2
モジュールの一覧は以下で確認すること。 (公式のモジュールの情報?とは違うようなのでこれで確認)
brew info nginx-full
参考リンク
開発環境
- OS X 10.11.5
- Xcode 7.3.1
- iOS 9.3.2
- iPhone 6+