Nginxは、トラフィックの多いサイトにサービスを提供するために人気のある、堅牢で高速、信頼性が高く、動的なオープンソースWebサーバーです。さらに、構成の容易さ、高いスケーラビリティ、および無数のプロトコルのサポートでよく知られています。
Nginxでサポートされるプロトコルの中には、新しいHTTP / 2プロトコルがあり、その主な利点は以前のHTTP1.1よりも優れています。コンテンツが豊富なWebサイトに必要な高速転送速度。
このガイドでは、HTTP/2をサポートする安全なNginxサーバーのインストールとセットアップについて詳しく説明します。
前提条件
まず、フライトチェックを行って、次のものがあるかどうかを確認しましょう
- Ubuntu18.04LTSのサーバーインスタンス
- Nginxバージョン1.9.5以降(Nginxのバージョンを確認するには、
nginx -v
を実行します )、Ubuntu18.04へのNginxのインストールをお読みください。 - OpenSSLバージョン1.0.2以降(opensslバージョンを使用してバージョンを確認してください)
- sudo権限を持つ通常のroot以外のユーザー
- 完全修飾ドメイン名(FQDN)この場合、
crazytechgeek.info
を使用します GoDaddyから購入しました。ドメイン名のAレコードは、サーバーのIPアドレスを指している必要があります。 crazytechgeek.infoは216.200.116.207を指しています。
- SSL証明書(自己署名証明書またはLet’s Encrypt SSLからの証明書。同様に、別のプロバイダーから1つ購入できます。
ステップ1– HTTP/2.0サポートを有効にする
まず、Nginxサーバーブロックを
で構成していることを前提としています。/etc/nginx/sites-available/your_domain
この場合、サーバーブロックは/etc/nginx/sites-available/crazytechgeek.info
です。 。
お気に入りのテキストエディタを使用して、サーバーブロックファイルを開き、listen
を見つけます。 示されているディレクティブ
最初のディレクティブはIPv6接続を示し、2番目のディレクティブはIPv4接続用です
次に、各ディレクティブを変更して、http2
を含めます。 示されているフラグ
これにより、サポートされているブラウザでHTTP/2を使用するようにNginxに指示されます
構成ファイルを保存して、エディターを終了します。
次に、/etc/nginx/sites-available/default
を開きます ファイルして同じ変更を加えます
テキストエディタを保存して終了します。
どのNginxファイルにも構文エラーがないことを確認するために、以下のコマンドを実行してください
$ sudo nginx -t
出力
ステップ2–古くて安全でない暗号を削除する
HTTP / 2が期待どおりに機能するためには、HTTP/2ブラックリストに載っている古くて安全でない暗号の使用を避ける必要があります。暗号スイートは、トラフィックの暗号化方法を指示する暗号化アルゴリズムです。
certbotを使用して証明書を取得した場合は、パス/etc/letsencrypt/options-ssl-nginx.conf
の暗号 HTTP/2に対して十分に安全ではありません。ただし、このファイルを変更するとエラーが発生するだけで、certbotが更新を適用できなくなります。これは、暗号のリストを指定し、ファイルを無視するようにNginxに指示する必要があることを意味します
Nginxのドメインサーバーブロックの構成ファイルを開きます
$ vim /etc/nginx/sites-available/crazytechgeek.info
この行にコメントする
# include /etc/letsencrypt/options-ssl-nginx.conf;
その行の下に、許可される暗号を定義するために以下の行を追加します
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ファイルを保存してテキストエディタを終了します
自己割り当ての証明書またはサードパーティの証明書が使用された場合は、ファイルを開きます
/etc/nginx/snippets/ssl-params.conf
$ sudo vim /etc/nginx/snippets/ssl-params.conf
以下に示すように線を見つけます
...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...
以下に示すように、それに応じてファイルを変更します
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
最後に、構成ファイルを保存して終了します
もう一度Nginx構成エラーを確認します
$ sudo nginx -t
すべてがうまくいけば、前に示したように以下の出力が表示されるはずです
Nginxを再起動します
$ sudo systemctl reload nginx
次のステップでは、サーバーがHTTP/2ページをサーバーできるかどうかをテストします
ステップ3– HTTP/2が有効になっているかどうかのテスト
次に、NginxウェブサーバーでHTTPが実行され、有効になっているかどうかをテストしましょう。
ターミナルで、以下のコマンドを実行します
curl -I -L https://your_domain
私たちの場合、それは
curl -I -L https://crazytechgeek.info
出力
または、
を押してGoogleデベロッパーツールを開いてHTTP/2を確認することもできます。Ctrl + Shift + I
次に、Network
をクリックします タブ。
Protocol
列、ラベルh2
を必ず見つけてください
ステップ4– HTTP StrictTransportSecurityの導入
最後に、サーバーがHTTPリクエストをHTTPSにリダイレクトできることは非常に明確ですが、HSTS HTTP StrictTransportSecurityを有効にしてそのようなリダイレクトを排除したいと考えています。ブラウザがHSTSヘッダーを偶然見つけた場合、ブラウザは一定期間サーバーへの接続を再試行しません。 ITは、安全で暗号化されたHTTPSプロトコルを介してのみデータを交換します。
これを実現するには、Nginx構成ファイルを開きます
$ vim /etc/nginx/nginx.conf
以下の行を追加してください
add_header Strict-Transport-Security "max-age=15768000" always;
max-age
秒単位で設定されます
サイトにサブドメインがあり、それらすべてにHSTSを適用する場合は、includeSubDomains
を追加します 行末のフラグ
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
保存して構成ファイルを終了します。
いつものように、エラーがないか確認してください
$ sudo nginx -t
最後に、Nginxを再起動します
$ sudo systemctl restart nginx
結論
この時点で、NginxサーバーはHTTP/2ページを提供しています。https://tools.keycdn.com/http2-test
にアクセスすることもできます。 示されているようにサイトのHTTP/2ステータスをテストします
または、このサイトにアクセスすることもできます
https://http2.pro/
より詳細な結果については、
を使用してくださいhttps://www.ssllabs.com/ssltest/