サイトのNGINXでHTTP / 2を有効にします

この記事では、 InfoboxのVPSでホストされているNGINXのサイトでHTTP / 2を有効にする方法と、これがサイトにもたらすメリットについて説明します。 HTTP / 2サポートがNGINX 1.9.5リリースに追加されました。







なぜHTTP / 2が必要なのですか?



HTTP / 2は、2015年の初めに標準化されたHTTPプロトコルの新しいバージョンです。 HTTP / 1.1の使用は、いくつかの機能により、Webアプリケーションのパフォーマンスに悪影響を及ぼします。



特に、HTTP / 1.0では、TCP接続で一度に1つの要求のみを実行できます。 パイプラインリクエストはHTTP / 1.1に追加されましたが、リクエストの並列実行を部分的にしか助けず、依然としてロックにつながります。 多くの要求を行う必要があるHTTP / 1.0およびHTTP / 1.1クライアントは、サーバーへの多くの接続を使用するようになりました。



さらに、HTTPヘッダーフィールドは冗長で頻繁に繰り返され、不必要なネットワークトラフィックを生成します。 また、TCPの輻輳で時間が無駄になります。 これにより、新しいTCP接続を使用して行われた多くの要求の遅延が増加する可能性があります。



HTTP / 2は、HTTPプロトコルの最適化されたセマンティクスを定義することにより、これらの問題を解決します。 特に、これにより、同じ接続を介した要求と応答のインターリーブが可能になり、HTTPヘッダーフィールドの効率的なエンコードが提供されます。 HTTP / 2では、リクエストに優先順位を付けて、より重要なリクエストをより高速に実行することもできます。



その結果、プロトコルはネットワークフレンドリーになり、HTTP / 1.xと比較して必要なTCP接続が少なくなり、ネットワークをより効率的に使用できます。 また、HTTP / 2では、バイナリ形式を使用してメッセージをより効率的に処理できます。



HTTP / 2はSSLと密接に関連しています。 この仕様はSSLの使用を必要としないという事実にもかかわらず、現在起動しているすべてのWebブラウザーは、WebサイトがSSLを使用している場合にのみHTTP / 2で動作します。





NGINXの最新バージョンでサーバーを展開します



InfoboxからVPSをまだお持ちでない場合は、こちらからサーバーを注文できます 。 この記事では、CentOS 7を搭載したサーバー用にHTTP2を構成する方法について説明します。サーバーを注文して作成した後、 SSH経由で接続します。



CentOS 7で新しいVPSにNGINXの最新バージョンをインストールします
NGINXの最新バージョンをインストールするには、公式リポジトリを追加します。 これを行うには、次の内容を/etc/yum.repos.d/nginx.repoファイルに追加します。

[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
      
      





Apacheを停止し、自動実行を防止します。

 systemctl stop httpd && systemctl disable httpd
      
      





次のコマンドでOSを更新します。

 yum -y update
      
      





その後、OSを再起動します。

 reboot
      
      





次のコマンドでnginxとfirewalldをインストールします。

 yum install -y nginx firewalld
      
      





nginxを実行して、スタートアップに追加します。

 systemctl start nginx && systemctl enable nginx
      
      





同様に、firewalldを起動します。

 systemctl start firewalld && systemctl enable firewalld
      
      





最後にやることは、ポート80、443、22を開くことです。

 firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --add-port=22/tcp --permanent
      
      





 firewall-cmd --reload
      
      





次に、VPSのIPアドレスのブラウザーに移動します。 NGINXのウェルカムページが表示されます。









証明書を生成します



HTTP / 2を機能させるには、NGINXでのHTTPS接続のサポートを現時点で有効にする必要があります。

通常、このプロセスは4つのステップで構成されます。



このプロセスにより、サイトに対するユーザーのブラウザーの信頼が確保されます。



暗号化キーが保存されるフォルダーを作成し、そこに移動します。

 mkdir /etc/nginx/ssl && cd /etc/nginx/ssl
      
      





キーの生成方法を理解するには、次の概念を理解する必要があります。

鍵生成アルゴリズム 。 OpenSSLはRSADSAおよびECDSAキーをサポートしますが、すべてのタイプがすべてのシナリオでの実用に適しているわけではありません。 たとえば、Webサーバーの場合、DSAキーは1024ビットに制限され(IEはそれ以上複雑なものをサポートしていない)、ECDSAキーは幅広い認証機関によってまだサポートされていないため、RSAを使用する必要があります。 SSHのキーを生成した場合、一部のクライアントではECDSAがまだサポートされていない可能性があるため、RSAとDSAが適しています。

キーサイズ 。 デフォルトのキーサイズは安全ではない場合があります。 たとえば、RSAのデフォルトキーは512ビットのみであり、その使用は完全に安全ではありません。 現在、RSAには最小2048ビット、DSAには2048ビット、ECDSAには256ビットを使用することが推奨されています。 RSAと4086ビットを使用します。



秘密鍵と証明書の署名要求を生成するには 、次のコマンドを実行します:

 openssl req -out /etc/nginx/ssl/domain.csr -new -newkey rsa:4086 -nodes -keyout /etc/nginx/ssl/domain.key
      
      





このプロセスでは、FQDN(共通名)-ドメイン内のドメイン名と電子メール(webmaster@domain.tldなど)を必ず指定してください。 キーにパスワードを設定しないでください。



生成後、 / etc / nginx / sslフォルダーに、拡張キー (秘密キー)とcsr (証明書署名要求)の2つのファイルが表示されます。 信頼できる証明書を使用する場合は、証明機関に注文してください(たとえば、 ここで注文できます )。 証明書を生成するには、次のように表示できるcsrコンテンツが必要です。

 cat /etc/nginx/ssl/domain.csr
      
      





証明書を注文して生成した後、その内容をファイル/etc/nginx/ssl/domain.crtに保存します。 証明書自体の内容の後、新しい行から、中間証明書の内容を同じファイルに追加します(証明書センターから提供される場合)。ファイルを保存します。



テスト環境を展開している場合は、次のように自己署名証明書無料で生成できます

 openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/nginx/ssl/domain.key -out /etc/nginx/ssl/domain.crt
      
      











秘密鍵を盗まれた場合に最新のメッセージを解読できないように、DHパラメータを生成する必要もあります。

 openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096
      
      







NGINXでHTTPSを介したアクセスのみを有効にし、HTTP2をアクティブにします



NGINX構成ファイル/etc/nginx/conf.d/default.confを編集します。

その中で、 サーバーセクションを削除して追加します:

 server { listen 80; server_name domain.tld www.domain.tld; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name domain.tld www.domain.tld; ssl on; ssl_certificate /etc/nginx/ssl/domain.crt; ssl_certificate_key /etc/nginx/ssl/domain.key; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_prefer_server_ciphers On; ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; location / { root /usr/share/nginx/html; } } }
      
      





domain.tldは、 HTTP2を有効にするサイトの名前に置き換えます。







変更後、次のコマンドを使用して、nginx構成のエラーをテストします。

 nginx -t
      
      











NGINXを再起動します。

 systemctl restart nginx
      
      





ブラウザでドメイン名でサイトを開きます。 自己署名証明書を使用し、それを証明機関で証明しなかった場合、警告が表示されます。







例外にサイトを追加すると、ブラウザーはこれを記憶し、正しく開きます。



サイトがHTTP2で実行されていることを確認するには、 FirefoxまたはChromeの HTTP2インジケーターを設定します。



HTTP2またはSPDYをサポートするサイトにアクセスすると、青い稲妻が表示されます。







実際、このサイトはHTTP2で動作します。



InfoboxトライアルVPS無料



VPSの試用版の記事に記載されているすべてを設定できます。

これを行うには、名前と電話番号をtrial@infobox.ruに送信して、コントロールパネルにアクセスするためのデータを受け取ります。 VPSは10日間テストできます。



成功しました!



All Articles