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 nginxnginxをhttp2モジュール付きでインストールする
brew install nginx --with-http2nginxの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+
