パッチはアルファ版であるため、作業プロジェクトで使用することは推奨されません。 作業サイトでHTTP / 2の機能を使用する場合は、SPDY / 3.1プロトコルの完全なサポートを実装するNGINXバージョン1.5.10以降に注意する必要があります 。 HTTP / 2の前身として、SPDYにはHTTP / 2と同じ利点がありますが、同時に現在のブラウザーバージョン間でより幅広いサポートがあります。
NGINXでのHTTP / 2サポートについて
HTTP / 2は新しいプロトコルであるため、それに関連する懸念と誤解があります。 主な懸念の1つは、HTTP / 2の実装にアプリケーション全体のアーキテクチャの変更が必要であることです。 この恐怖とHTTP / 2に関連する他の多くの要素には根拠がありません。 実際、NGINXを使用するアプリケーションの場合、HTTP / 2サポートは、わずかなアーキテクチャの変更で実装されます。
新しいプロトコルへの移行を容易にするために、NGINXは「HTTP / 2ゲートウェイ」として機能します。 クライアント側では、NGINXは以前と同様にHTTP / 2(ブラウザーがHTTP / 2をサポートしている場合)を介してブラウザーと通信し、サーバー側ではHTTP / 1.x(またはFastCGI、uwsgi、SCGI)を介して通信します。 クライアントとバックエンドの間で、NGINXはHTTP / 2をHTTP / 1.x(またはFastCGIなど)に変換します。 つまり、NGINXを介してプロキシされるサーバーとアプリケーションは、HTTP / 2に移行するために変更を必要としません。 既存のHTTPS構成に必要な変更は、 http2パラメーターをlistenディレクティブに追加することだけです ( sslパラメーターも必要です)。
listen 443 ssl http2 default_server;
2015年6月現在、ユーザーの50%以上が HTTP / 2をサポートするブラウザーを使用しています。 言い換えれば、ブラウザによるHTTP / 2の実装は非常に高く、時間とともに増加します。 NGINXは、HTTP / 1.xとHTTP / 2の両方が同時に機能するように、TLSの拡張であるApplication Layer Protocol Negotiation( ALPN )を使用します。 ブラウザがサーバーに接続すると、サポートされているプロトコルのリストが送信されます。 リストにh2が含まれている場合、NGINXはHTTP / 2を使用して接続します。 ブラウザがALPNをサポートしていない場合、またはサポートされているプロトコルのリストにh2が含まれていない場合、NGINXはHTTP / 1.xを使用します。
ご想像のとおり、HTTP / 1.xのいくつかの最適化は、HTTP / 2のアンチパターンになりました 。 スプライトの使用、画像の結合またはインライン化、HTTP / 1.xの使用に役立つドメイン間のリソース共有などの最適化は、HTTP / 2では不要になりました。 もちろん、これらの最適化を使用してHTTP / 2を実装できますが、パフォーマンスを向上させるためにそれらを削除することを強くお勧めします。
HTTP / 2を使用したNGINXビルド
- ALPNをサポートするために必要なOpenSSLバージョン1.0.2以降をインストールします 。
- NGINXバージョン1.9.0以降をダウンロードして解凍します。
$ wget http://nginx.org/download/nginx-1.9.3.tar.gz $ tar zxvf nginx-1.9.3.tar.gz $ cd nginx-1.9.3
- パッチをダウンロードします。
$ wget http://nginx.org/patches/http2/patch.http2.txt
- パッチの適用性を確認します。
$ patch -p1 --dry-run < patch.http2.txt
- エラーがない場合は、次を使用します。
$ patch -p1 < patch.http2.txt
- 必要なオプションを使用してNGINXを構成します。
- ソースおよび静的リンクからOpenSSLとともにNGINXを構築するには:
$ ./configure --with-http_ssl_module \ --with-http_v2_module \ --with-debug \ --with-openssl=/path/to/openssl-1.0.2 \ ...
- OpenSSLがサードパーティのライブラリとしてインストールされている場合(Mac OS Xなど):
$ ./configure --with-http_ssl_module \ --with-http_v2_module \ --with-debug \ --with-cc-opt="-I/opt/local/include" \ --with-ld-opt="-L/opt/local/lib" \ ...
- ソースおよび静的リンクからOpenSSLとともにNGINXを構築するには:
- その後、NGINXを収集します。
$ make
NGINXセットアップ
HTTP / 2サポートを有効にするには、 sslおよびhttp2パラメーターをlistenディレクティブに追加します 。
server { listen 443 ssl http2 default_server; ssl_certificate server.crt; ssl_certificate_key server.key; ... }
注: sslパラメーターは必須です。 この記事の執筆時点では、ブラウザーはSSL暗号化なしのHTTP / 2をサポートしていません。
HTTP / 2の正常性をテストするために、 Google ChromeおよびFirefox用の優れたプラグインがいくつかあります。
備考
以前のリリースと同様に、いくつかの問題があります。
- このパッチは初期のアルファ版であり、テストにのみ使用できます。 現在、モジュールの積極的な作業が進行中であり、テストに参加するすべての人に感謝します(結果はnginx-develに送信できます)。
- 「サーバープッシュ」はこのバージョンのパッチには実装されておらず、HTTP / 2の最初の動作実装ではサポートされません。 おそらく、この機能はNGINXの将来のバージョンで登場するでしょう。
- このパッチはSPDYモジュールを削除し、HTTP / 2モジュールに置き換えます。 つまり、このパッチを適用した後、SPDYを使用してNGINXを構成することはできません。 これは、商用バージョンおよび非商用バージョンのHTTP / 2の最初の動作バージョンでも実行されます。 SPDYは2016年の初めに廃止されるため、両方のディレクティブをサポートする必要はありません。
特別な感謝
NGINX、Inc. NGINXのアクティブユーザーであり、開発のスポンサーであるDropboxとAutomatticに感謝します。 彼らの貢献によりHTTP / 2モジュールの作成が加速しました。そして、あなたがそれらをサポートする機会を持つことを願っています。
UPD: HTTP2サポートは、NGINXのオープンソースバージョンに既に追加されています。 誰でもソースをダウンロードできます 。