このチュートリアルでは、HTTP / 2プロトコルを有効にし、Ubuntu20.04でApacheでサーバープッシュを使用する方法を説明します。ご存知かもしれませんが、HTTP/2はHTTP/1.1プロトコルよりもはるかに高速です。これは主に、前者を使用すると、Webブラウザが単一のTCP接続(多重化)で同時に複数の要求をWebサーバーに送信し、順序が狂って応答を受信できるためです。 。
現在、平均的なインターネットユーザーの帯域幅は以前よりもはるかに高くなっているため、ウェブページの読み込みが速くなります。ただし、帯域幅が5Mbpsに達した後は、ページの読み込み時間にはほとんど影響しません。 5Mbpsまたは10Mbpsのどちらを使用していても、Webページはほぼ同じ時間で読み込まれます。最近、ページの読み込み時間に大きな影響を与える可能性があるのは、待ち時間とラウンドトリップの数です。これは、HTTP/2多重化が解決する問題の1つです。
前提条件
HTTP / 2仕様ではプレーンテキストのHTTPが許可されていますが、実際には、すべての主流のWebブラウザーはHTTPSを必要とする方法でHTTP/2を実装しています。したがって、HTTP / 2プロトコルを有効にする前に、WebサイトでHTTPSを有効にする必要があります。次の詳細なガイドを読んで、HTTPSを有効にすることができます
- UbuntuでLet’sEncryptを使用してApacheでHTTPSを適切に有効にする方法。
ApacheのHTTP/2は、バージョン2.4.26以降で本番環境に対応しています。したがって、mod_http2
でビルドされたApache2.4.26以降が必要になります。 、Apache HTTP/2モジュール。 Ubuntu20.04にはApache2.4.41が付属しており、次のコマンドで確認できます:
apache2 -v
サンプル出力:
Server version: Apache/2.4.41 (Ubuntu) Server built: 2020-04-13T17:19:17
上記の2つの要件を満たしたら、以下の手順に従ってApacheでHTTP/2を有効にします。
Apache仮想ホストでHTTP/2プロトコルを有効にする
まず、HTTP/2モジュールを有効にする必要があります。
sudo a2enmod http2
次に、Apache仮想ホストファイルを編集します。 Let’s EncryptでHTTPSを有効にした場合、SSL仮想ホストはle-ssl.conf
で終わる別のファイルとして作成されます 。
sudo nano /etc/apache2/sites-enabled/your-site-le-ssl.conf
<VirtualHost *:443>
を開いた後に次のディレクティブを配置します タグ。
Protocols h2 http/1.1
ファイルを保存して閉じます。次に、変更を有効にするためにApacheを再起動します。
sudo systemctl restart apache2
mod_phpを使用している場合
mod_php
を使用する場合 モジュールをApacheで使用する場合は、preforkMPMモジュールを使用します。残念ながら、Mod_http2
preforkをサポートしていません。 HTTP/2をサポートするためにイベントMPMモジュールを使用できます。イベントMPMはmod_php
と互換性がないため、FastCGIでPHPを実行する必要があります。 。以下の手順に従って、プリフォークからイベントMPMに切り替えます。
PHP7モジュールを無効にします。
sudo a2dismod php7.4
プリフォークMPMモジュールを無効にします。
sudo a2dismod mpm_prefork
イベントMPM、Fast_CGI、およびsetenvifモジュールを有効にします。
sudo a2enmod mpm_event proxy_fcgi setenvif
PHP-FPMをインストールする
sudo apt install php7.4-fpm
PHP-FPMを開始する
sudo systemctl start php7.4-fpm
PHP-FPMを起動時に開始できるようにします。
sudo systemctl enable php7.4-fpm
次のコマンドを使用して、PHP-FPMをApacheのPHPハンドラーとして設定します。これにより、/etc/apache2/conf-available/php7.4-fpm .conf
が有効になります。 ファイル。
sudo a2enconf php7.4-fpm
変更を有効にするには、Apacheを再起動します。
sudo systemctl restart apache2
テスト
サイトが実際に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:動画の埋め込み用
これらのリソースをクライアントにプッシュするには、<VirtualHost>
に次のディレクティブを追加します ブロック。 27を独自のWordPressテーマ名に置き換えます。
Header add Link "</wp-content/themes/twentyseventeen/style.css>;rel=preload" Header add Link "</wp-includes/js/jquery/jquery.js>;rel=preload" Header add Link "</wp-includes/js/jquery/jquery-migrate.min.js>;rel=preload" Header add Link "</wp-includes/js/wp-embed.min.js>;rel=preload"
ファイルを保存して閉じます。次に、変更を有効にするためにApacheを再起動します。
sudo systemctl restart apache2
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つで機能しています。 「メモリキャッシュから」と表示されている場合は、それを右クリックしてブラウザのキャッシュをクリアし、リロードします。
次のステップ
それでおしまい!このチュートリアルが、Ubuntu20.04のApacheでHTTP/ 2を有効にし、サーバープッシュを使用するのに役立つことを願っています。また、サイトをハッキングから保護するためにModSecurityWebアプリケーションファイアウォールを設定することもできます。
- Debian/UbuntuでApacheを使用してModSecurityを設定する方法
いつものように、この投稿が役に立った場合は、無料のニュースレターを購読してください。