NGINXのHTTP / 2モジュールのテストバージョンが公開されました

NGINXのHTTP / 2サポートを提供するパッチのアルファバージョンを導入しました。 このパッチには、NGINXバージョン1.9.0以降が必要です。 商用および非商用の NGINXバージョンのHTTP / 2プロトコルの完全なサポートは、今年の終わりまでに計画されています。 フィードバックは、 nginx-develメーリングリストに送信できます。



パッチはアルファ版であるため、作業プロジェクトで使用することは推奨されません。 作業サイトで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ビルド



  1. ALPNをサポートするために必要なOpenSSLバージョン1.0.2以降をインストールします

  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
          
          





  3. パッチをダウンロードします。

     $ wget http://nginx.org/patches/http2/patch.http2.txt
          
          





  4. パッチの適用性を確認します。

     $ patch -p1 --dry-run < patch.http2.txt
          
          





  5. エラーがない場合は、次を使用します。

     $ patch -p1 < patch.http2.txt
          
          





  6. 必要なオプションを使用して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" \ ...
            
            





  7. その後、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、Inc. NGINXのアクティブユーザーであり、開発のスポンサーであるDropboxAutomatticに感謝します。 彼らの貢献によりHTTP / 2モジュールの作成が加速しました。そして、あなたがそれらをサポートする機会を持つことを願っています。



UPD: HTTP2サポートは、NGINXのオープンソースバージョンに既に追加されています。 誰でもソースダウンロードできます



All Articles