1. pyonk

    Posted

    pyonk
Changes in title
+EC2+nginxでhttp2対応できたとおもったらできてなかった話。(解決します)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,168 @@
+## ssl対応でサイトパフォーマンスがあがるらしい
+
+あるサイトのはじめてのSSL対応の作業中、「SSL対応するとはやくなるで!!」[という記事](https://hyper-text.org/archives/2015/01/full_time_ssl_site_speed.shtml)を見つけました。
+
+いわく、
+> Web サイトのパフォーマンスについて、「SSL 化でパフォーマンスが悪化する可能性」 と、一方で 「HTTP/2 や SPDY が利用可能な状況では SSL 化でパフォーマンスが向上する可能性」 という両方の可能性
+
+だそうです。
+なるほど、本来ならSSLで接続するとパフォーマンスが悪化する(SSLハンドシェイクによる)けど、HTTP/2やSPDYを使うとパフォーマンスが向上するんか!
+
+じゃあSSL接続もさることながら、HTTP/2やSPDY対応させなければ!!
+
+## nginxをSPDYで接続!!
+
+EC2上で動いているnginxのバージョンをたしかめてみたところ、`1.8.1`とのこと。
+めでたくSPDYに対応しておりました。
+SSL化をチャチャッと済ませて、SPDY対応したろ〜と、とりあえずSPDYに対応させました。
+
+```nginx:hoge.conf
+server {
+ listen 443 default ssl spdy;
+ ssl on;
+ ssl_certificate /etc/nginx/ssl/server.ssl.pem;
+ ssl_certificate_key /etc/nginx/ssl/server.key;
+ :
+ :
+```
+
+よっしゃこれではやくなるわ!!
+とおもっていた矢先でした。
+
+## ChromeのSPDYサポートが終了(していた)
+> 今、Googleは同社のブラウザー、ChromeからSPDY対応を外す準備が整い、5月15日でChromeのSPDYサポートを終了すると発表した。
+[Chrome、SPDYのサポートを5月15日に終了 | TechCrunch Japan](http://jp.techcrunch.com/2016/02/12/20160211chrome-will-drop-spdy-support-on-may-15/)
+
+わあ〜〜〜。
+ま、まあ落ち着いてgoogle analytics見てみよう...。chrome少なければ良いよね別に...。
+
+![スクリーンショット 2016-06-27 20.21.50.png](https://qiita-image-store.s3.amazonaws.com/0/49825/8aace47f-8523-f133-541b-4b158314f5fa.png)
+
+**ですよね〜〜〜!!!!**
+少ないわけもなく、HTTP/2に対応せざるを得んと心の中で決意するのでした。
+
+## nginxのアップデート
+さて、SPDYをあきらめて、HTTP/2の対応をしていきます。
+
+HTTP/2をnginxで対応させるためにはバージョン`1.9.5`からだそうです。
+EC2上のnginxは前述の通り`1.8.1`。
+残念なことに対応していなかったのでアップデートします。
+
+```
+# yum update nginx
+```
+
+が!
+EC2(Amazon linux)の標準リポジトリではnginxの最新バージョンが1.8.1ですので、アップデートできませんでした。
+なのでソースからインストールしていきます。
+(ここでインストールせずともまた後ほどするのでやらないで良いです。)
+
+```
+$ sudo yum install pcre pcre-devel pcre-devel zlib-devel openssl-devel
+$ wget http://nginx.org/download/nginx-1.10.1.tar.gz
+$ tar -xvzf nginx-1.10.1.tar.gz
+$ cd nginx-1.10.1
+$ ./configure --with-http_ssl_module --with-http_v2_module
+$ make
+$ sudo make install
+```
+
+`/usr/local/nginx/sbin/nginx`にインストールされているので
+/etc/init.d/nginxを変更しときましょう。
+
+```
+$ nginx -v
+nginx version: nginx/1.10.1
+```
+
+できた!
+HTTP/2に対応のバージョンだ!!
+
+```nginx:hoge.conf
+server {
+ listen 443 default ssl http2;
+ ssl on;
+ ssl_certificate /etc/nginx/ssl/server.ssl.pem;
+ ssl_certificate_key /etc/nginx/ssl/server.key;
+ :
+ :
+```
+
+## そして運命の時
+
+ちゃんとできてるか確認のために、chromeの拡張機能を入れておきましょう。
+[HTTP/2 and SPDY indicator - Chrome ウェブストア](https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin)
+
+
+早速nginxを起動してアクセスしてみます。
+
+![スクリーンショット 2016-06-27 20.40.28.png](https://qiita-image-store.s3.amazonaws.com/0/49825/35c7b504-9989-4b11-f44a-215fbf308c08.png)
+
+あれ。拡張機能壊れてるのかな??
+
+
+## opensslをアップデートしなければならない
+
+そういえば、さっきSPDYについて調べていた時に、
+> Googleが提案したTLSのNPN(Next Protocol Negotiation)拡張を利用することで実現しています。この拡張仕様は、現在IETFにドラフト仕様が提出されており、既にオープンソースのOpenSSLに実装されている機能です。
+> [Web表示の高速化を実現するSPDYとHTTP/2.0の標準化 | 最新の技術・取り組み | IIJ](http://www.iij.ad.jp/company/development/tech/activities/spdy/)
+
+とありました。
+さらに、
+
+> なお現在仕様検討中のHTTP/2.0では、NPNの手順を改良したALPN(Application Layer Protocol Negotiation)仕様を利用することが採用されています。
+> [Web表示の高速化を実現するSPDYとHTTP/2.0の標準化 | 最新の技術・取り組み | IIJ](http://www.iij.ad.jp/company/development/tech/activities/spdy/)
+
+とあります。
+
+なーるほど。opensslがALPN対応してないなこれ。
+ここにたどり着くまでかなり時間つかいました。
+
+
+例のごとくバージョンチェックです。
+
+```
+$ openssl version
+OpenSSL 1.0.1k-fips 8 Jan 2015
+```
+案の定ですorz
+ALPN対応は`1.0.2`からですorz
+
+アップデートしなければなりません。
+と思ったのですが、opensslを指定してnginxをインストールすることが可能なようなので今回はそうします。
+
+```
+$ wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
+$ tar -xvzf openssl-1.0.2h.tar.gz
+```
+
+きちんとopensslを指定してインストールします。
+
+```
+$ cd
+$ cd nginx-1.10.1
+$ ./configure --with-http_ssl_module --with-http_v2_module --with-openssl=/home/username/openssl-1.0.2h
+$ make
+$ sudo make install
+```
+
+nginxをrestartしてアクセスします。どきどき。
+
+ようやく!青い稲妻が!!!
+
+![スクリーンショット 2016-06-27 21.04.15.png](https://qiita-image-store.s3.amazonaws.com/0/49825/1eef4c97-3d26-c4e2-6319-3ce386fe389f.png)
+
+きちんとHTTP/2、ALPN対応したか確認したい場合は
+[HTTP/2 Test | A simple HTTP/2.0 test tool](https://tools.keycdn.com/http2-test)でどうぞ
+
+## さいごに
+サーバーサイドのことは不慣れでしたし、最新の情報に疎かったため非常に難儀しました。
+今後、きちんと最新情報を追っていこうと思います。
+もし、間違い、アドバイス、オススメのサイトなどありましたら、教えていただけると嬉しいです。
+
+
+#参考(ありがとうございました)
+[yum は止めて nginx をソースからインストールする | 脳無しの呟き《土鍋と麦酒と炬燵猫》](http://donabeneko.jp/blog/20130413134434.html)
+[常時 SSL 化による Web サイト表示速度向上の可能性について | WWW WATCH](https://hyper-text.org/archives/2015/01/full_time_ssl_site_speed.shtml)
+[Web表示の高速化を実現するSPDYとHTTP/2.0の標準化 | 最新の技術・取り組み | IIJ](http://www.iij.ad.jp/company/development/tech/activities/spdy/)
+[The day Google Chrome disables HTTP/2 for nearly everyone: May 31st, 2016](https://ma.ttias.be/day-google-chrome-disables-http2-nearly-everyone-may-31st-2016/)