nginx

TengineでHTTP/2とSPDYを両方サポートする

More than 3 years have passed since last update.


nginxのHTTP/2サポート開始とSPDYサポート停止

nginxは1.9.5からHTTP/2をサポートするようになりましたが、一方で同時にSPDY/3.1のサポートを打ち切っています。以下はnginx-1.9.5のChangeLogの抜粋です。(nginxの変更履歴はこちら)

    *) Feature: the ngx_http_v2_module (replaces ngx_http_spdy_module).

Thanks to Dropbox and Automattic for sponsoring this work.

1.9.4までは--with-http_spdy_moduleというオプションが用意されていましたが、1.9.5以降ではこのオプションおよびSPDY/3.1の実装自体が削除されてかわりに--with-http_v2_moduleというオプションとHTTP/2の実装が入りました。

ばっさり切られるとそれはそれで困るのですが、昨年のはじめの段階でSPDYの提唱元であったGoogleはすでにSPDYの将来的なサポートの停止を宣言するとともにHTTP/2への移行を促していましたし、これはある程度仕方がないことでしょう。

http://googledevjp.blogspot.jp/2015/02/http2-spdy.html


SPDYサポートの需要について

殊スマートフォンではHTTP/2のサポートはまだ十分ではない状況ですし、HTTP/2はしゃべれないけどSPDYはしゃべれるという端末(e.g. iOS8.x)は今後しばらく残るだろうと思われます。そのため将来的にはHTTP/2一本になっていくとしてもHTTP/2とSPDYの両方をサポートしたサーバの需要はまだそれなりにあるでしょう。

実際、CloudflareのようにHTTP/2とSPDYの両方をサポートしているCDNもあります。

https://blog.cloudflare.com/introducing-http2/


TengineでHTTP/2とSPDYを両方ともサポートする

Tengineはnginxの有名なフォークです。モジュールの動的組み込みやアップストリームのヘルスチェックなど、nginx本家にはない機能が実装されてたりします。で、昨年末に新しいバージョン(2.1.2)がリリースされましたが、公式サイトの説明に下記の一文があります。

support for both HTTP v2 protocol and SPDY v3 protocol, be able to use them together.

どうやらTengineではHTTP/2とSPDY/3.1の両方が利用出来るようです。実際こんな感じでlistenディレクティブにspdyhttp2両方のパラメータを渡すことができます。

listen 443 ssl spdy http2;

SPDYとHTTP/2両方サポートしたいなぁ、どうしようかなぁと考えてたのですが、さっとやるならTengineを利用するのが良さそうです。