Life with open mind: コミケ90で「Get Started with HTTP/2」を出します(3日目 西4 f-44b)
これを読みまして、「よし、自分のサイトもこのビッグウェーブに乗せよう」と思い、(Raspberry Piで運用してる以外のSSLに対応してる)サイトをHTTP/2対応にしました。
サーバ弄る前にクライアントのWindows 10マシンにRS1適用したらOSごと起動しなくなって死ねって思いました。
薄いご本にはOCSP Staplingの設定や、ssl_ciphersの設定について解説してあったのですが、結構前に「SSL LabsでA+取らなきゃ(使命感)」みたいな時期があって、そこら辺は全部済ませてたので飛ばしました。
環境
OS: CentOS 7
nginx: nginx/1.11.3(yum install)→ nginx/1.11.3 (make install)
openssl: OpenSSL 1.0.1e(yum install) → OpenSSL 1.0.2h(make install)
nginx側の設定
http2に対応しているのが1.10.0以上ですが、yumで入ってるのが1.11.3なので何もしなくていい!余裕ですね。$nginx -Vで確認しても「–with-http_v2_module」がついてるので一安心です。そんなふうに思ってたら30分後に自分でビルドすることになったんですけどね。confのserverディレクティブに以下の設定をすると、http2で通信できるようになります。
listen 443 ssl http2;
あとはnginxを再起動すればOKですね。簡単。
http/2で通信してるか確認してみる
firefoxとedgeとchromeで確認してみました。
firefox以外http/1.1で通信していました。
原因を調べる
Supporting HTTP/2 for Google Chrome Users | NGINX
これでした。Chromeでhttp/2通信させようと思ったら、ALPNに対応させないといけないのですが、openssl 1.0.2以降でないと対応してないようです。薄いご本に「ALPNはopenssl 1.0.2以降じゃないと対応してないよ」って書いてあったけど、こういう理由だったんですね。(ALPNに対応させないといけない理由が本にはなかったので、そこはちょっと残念だったかも。)
必要なものをビルドする
opensslの最新版を展開(ビルド不要)。
# cd /usr/local/src
# wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
# tar -zxf openssl-1.0.2-latest.tar.gz
nginxをビルド。
予め$nginx -Vでconfigureがどうなってるのか調べておくと良いです。
SRPMがあるからそれを使う手もあります。
Index of /packages/mainline/centos/7/SRPMS/
RPMのコンパイルオプションを変更してインストールする方法 | あぱーブログ
今回は自力でmakeしました。コマンド書こうと思ったのですが、綺麗なまでに以下の記事と同じところではまったので、記事のURLを紹介しておきます。
nginxのコンパイルメモ – Qiita
上記Qiitaと違う点として、私の環境のconfigureではnjsのバージョンは0.1.0だったため、tipではなく0.1.0を指定しました。
njs: cdb8d20935ee
configureに以下を追加して使いたいopensslの場所を指定します。
--with-openssl=/usr/local/src/openssl-1.0.2h
無事、make installできました。
結果
SSL Server Test: retrorocket.biz (Powered by Qualys SSL Labs)
HTTP/2 Test | A simple HTTP/2.0 test tool
いくばくか早くなったと信じています。