このチュートリアルでは、Debian8サーバーでNginxを使用してHTTP/ 2プロトコルを有効にし、Webページの読み込みを高速化する方法を示します。 2つの要件があります。
- OpenSSL1.0.2で構築されたNginxバージョン1.9.5以降
- HTTPSが有効
これらに1つずつ取り組みましょう。
JessieBackportsRepoからのNginxのインストール
ALPN(Application Layer Protocol Negotiation)は、サーバーがWebブラウザーとHTTP/2プロトコルをネゴシエートできるようにするTLS拡張機能です。 ALPNがないと、WebサーバーとWebブラウザの両方がHTTP / 2をサポートしている場合でも、HTTP/2接続を確立できません。 OpenSSLライブラリは、バージョン1.0.2でのALPNをサポートしています。
Debian8にはOpenSSL1.0.1があります。 OpenSSLのバージョンを確認するには、
を実行します。openssl version
システムにOpenSSL1.0.2をインストールする必要はないことに注意してください。 OpenSSL1.0.2で構築されたNginx1.9.5以降のみが必要です。 Nginxは、バージョン1.9.5でHTTP/2のサポートを追加しました。デフォルトのDebian8リポジトリにはNginx1.6.2があります。幸い、Jessieバックポートリポジトリは、OpenSSL1.0.2lで構築されたNginx1.10.3を提供します。
このリポジトリを追加するには、ソースリストファイルを作成します。
sudo nano /etc/apt/sources.list.d/jessie-backports.list
このファイルに次の行を追加します。
deb http://ftp.debian.org/debian jessie-backports main
ファイルを保存して閉じます。次に、パッケージインデックスを更新し、JessieバックポートリポジトリからNginxをインストールします。
sudo apt update sudo apt -t jessie-backports install nginx
Nginxのバージョンを確認し、パラメーターを構成します。
sudo nginx -V
出力:
nginx version: nginx/1.10.3 built with OpenSSL 1.0.2l 25 May 2017 TLS SNI support enabled
Nginx.orgリポジトリにはDebian8用の最新バージョンのNginxが含まれていますが、そのパッケージはOpenSSL 1.0.1に対して構築されているため、ALPNをサポートしていません。
Debian8へのSSL証明書のインストール
Let’sEncryptによって発行された無料のSSL証明書をインストールできます。まず、JessieBackportsリポジトリからDebian8にLet’s Encryptクライアント(Certbot)をインストールします。 Python-certbot-nginx
Certbot用のNginxプラグインです。
sudo apt install -t jessie-backports certbot python-certbot-nginx
これで、Nginx仮想ホストを構成した場合は、Nginxプラグインを使用して、以下のようにSSL証明書を取得してインストールします
sudo certbot --nginx --agree-tos -d example.com --redirect --staple-ocsp --must-staple --email your-email-address
説明:
-
--nginx
:Nginxプラグインを使用する -
--agree-tos
:Let'sEncryptの利用規約に同意する --redirect
:新しく認証された仮想ホストのすべてのHTTPトラフィックをHTTPSに自動的にリダイレクトします。-
--staple-ocsp
:OCSPステープリングを有効にします -
--must-staple
:OCSPMustStaple拡張機能を証明書に追加します --email
:登録と復旧の連絡に使用されるメール
HTTP2プロトコルの有効化
デフォルトでは、CertbotはNginx用にHTTP/2を構成しません。 HTTP / 2を有効にするには、Nginx仮想ホストファイルを編集します。次のディレクティブを見つけます。
listen 443 ssl;
次に、以下のようにhttp2を追加します。
listen 443 ssl http2;
ファイルを保存して閉じます。 Nginxをリロードします。
sudo systemctl reload nginx
テスト
サイトが実際にHTTP2プロトコルを使用していることをどのように知っていますか?
- FirefoxまたはGoogleChromeで、サイトのページを読み込んでから、
Ctrl+Shift+I
を押します。 開発者ツールを開くには 、ネットワークをクリックします タブ。ドメインで使用されているプロトコルを確認できます。 - GoogleChromeにHTTP/2およびSPDYインジケーター拡張機能をインストールすることもできます。
- FirefoxにHTTP/2インジケーター拡張機能をインストールします。
- KeyCDNによるオンラインHTTP/2テストツールは、HTTP/2とALPNがサイトでサポートされているかどうかを教えてくれます。
キャッシュされたオブジェクトが誤ってHTTP/1.1プロトコルでマークされている可能性があるため、ブラウザのキャッシュをクリアする必要がある場合があることに注意してください。
サーバープッシュを有効にする方法
HTTP/2にはサーバープッシュと呼ばれる機能が付属しています 、これにより、Webサーバーは、Webブラウザーが要求しなかったが、Webページをロードするために必要なリソースを送信できます。たとえば、WebブラウザがHTMLドキュメントを要求した場合、Webサーバーはクライアントが関連付けられたCSSファイルを必要とし、それをHTMLドキュメントと一緒に送信することを認識しているため、WebブラウザがCSSの要求を送信する必要がなくなります。旅行が減ります。
ここでは、例としてWordPressを使用します。 WordPressサイトには、一般的に次のリソースが必要です。
- style.css:テーマディレクトリのルートにあるメインスタイルシート。
- jquery.js:JQueryライブラリ
- jquery-migrate.min.js:古いJQuery
- wp-embed.min.js:動画の埋め込み用
これらのリソースをクライアントにプッシュするには、server
に次のディレクティブを追加します ブロック。 27を独自のWordPressテーマ名に置き換えます。
http2_push /wp-content/themes/twentyseventeen/style.css; http2_push /wp-includes/js/jquery/jquery.js; http2_push /wp-includes/js/jquery/jquery-migrate.min.js; http2_push /wp-includes/js/wp-embed.min.js;
ファイルを保存して閉じます。次に、変更を有効にするためにNginxを再起動します。
sudo systemctl restart nginx
functions.php
に次のコードを追加する必要があることに注意してください WordPressのCSSおよびJavaScriptファイルからバージョン番号を削除するファイル。 WordPressが更新されたときに、これらのファイルにバージョン番号が追加されていると、サーバープッシュは機能しません。
// Remove WP Version From Styles add_filter( 'style_loader_src', 'sdt_remove_ver_css_js', 9999 ); // Remove WP Version From Scripts add_filter( 'script_loader_src', 'sdt_remove_ver_css_js', 9999 ); // Function to remove version numbers function sdt_remove_ver_css_js( $src ) { if ( strpos( $src, 'ver=' ) ) $src = remove_query_arg( 'ver', $src ); return $src; }
サーバープッシュのテスト
Google Chromeブラウザでページを読み込み、Ctrl+Shift+I
を押します 開発ツールを開き、[ネットワーク]タブをクリックします。 F5を押してリロードします。以下のスクリーンショットからわかるように、サーバープッシュは私のWebサイトの1つで機能しています。 「メモリキャッシュから」と表示されている場合は、それを右クリックしてブラウザのキャッシュをクリアし、リロードします。
改善
CertbotNginxプラグインはまだ成熟していません。弱いキー交換パラメーターを使用しているため、Nginxプラグインを使用した後にSSLラボテストでBを取得しました。 Mozilla SSL構成ジェネレーターは、最新のSSL構成を作成するのに役立つ優れたツールです。
それでおしまい!このチュートリアルが、Debian8サーバーでNginxを使用してHTTP/2を有効にするのに役立つことを願っています。いつものように、この投稿が役に立った場合は、無料のニュースレターを購読してください。