UbuntuのApacheでHTTP/2を有効にする方法

ワールド・ワイド・ウェブ(www)の発足以来、HTTPプロトコルは年々インターネット上で安全かつ速くデジタルコンテンツを配信するために進化してきました。

最も一般的に使用されているバージョンはHTTP 1.1で、より早いバージョンの欠如を埋める機能の改善と性能最適化が盛んに行われています。しかし、HTTP/2で解決された特徴的な機能の他に、いくつかの欠如があることが指摘されています。

HTTP/1.1の制約は何でしょうか?

HTTP/1.1プロトコルは、特に高流量のウェブサーバを運用する場合に idealsに欠ける以下の欠如があるということです。

  1. HTTPヘッダーの長さによるwebページの読み込み遅延。
  2. HTTP/1.1は各TCP接続につき、1つのファイルにつき1つの要求しか送信できません。
  3. HTTP/1.1は各TCP接続に1つの要求だけを処理するため、ブラウザは同時に処理するために多数の並行なTCP接続を送信する必要があります。これはTCP Congestionを引き起こし、最終的には帯宽の無駄使いとネットワークの悪化につながります。

前述の問題は、パフォーマンスの劣化と带宽使用の高额なオーバーヘッド成本を引き起こしました。HTTP/2はこれらの問題を解決し、今ではHTTPプロトコルの未来です。

HTTP/2の利点

以下の利点を提供します。

  1. ヘッダー圧縮機能は、クライアント要求を最小限に抑え、帯宽消費を低下させます。結果的に、ページの読み込み速度が速くなります。
  2. 1つのTCP接続を介して複数のリクエストを多重化します。サーバーとクライアントの両方がHTTPリクエストを複数のフレームに分割し、他の端で再グループ化できます。
  3. これにより、より高速なWebパフォーマンスが実現され、それによりSEOランキングが向上します。
  4. ほとんどの主流ブラウザはHTTPS経由でHTTP/2をロードするため、セキュリティが向上します。
  5. HTTP/2は、ヘッダー圧縮機能のおかげで、モバイルフレンドリーと見なされます。

それにもかかわらず、私たちはApacheUbuntu 20.04 LTSおよびUbuntu 18.04 LTSでHTTP/2を有効にします。

前提条件:

開始する前に、ApacheウェブサーバーでHTTP/2を有効にする前にHTTPSを有効にしてください。これは、ほとんどの主流WebブラウザがHTTPS経由でHTTP/2をサポートしているためです。 Ubuntu 20.04のインスタンスに向けられたドメイン名を持っています。これはApacheサーバーが実行されています Let’s Encrypt証明書で保護されています。

また、HTTP/2に移行することを意図したプロダクションサーバーでは、Apache 2.4.26以降のバージョンをお勧めします。

実行しているApacheのバージョンを確認するには、次のコマンドを実行します:

$ apache2 -v
Check Apache Version in Ubuntu

出力から、この記事を書いた時点で最新のバージョンであるApache 2.4.41を使用していることがわかります。

Apache仮想ホストでHTTP/2を有効にする

始める前に、まずウェブサーバーがHTTP/1.1で実行されていることを確認してください。これは、Google Chromeの開発者ツールセクションを開き、Ctrl + SHIFT + Iの組み合わせキーでブラウザ上で行うことができます。’Network’タブをクリックし、’Protocol’列を見つけます。

Confirm HTTP Protocol Version

次に、以下のコマンドを実行して、HTTP/2モジュールをUbuntuに有効にします。

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

次に、SSL仮想ホストファイルを見つけて編集します。もし、Let’s Encryptを使用してHTTPSを有効にした場合、新しいファイルがle-ssl.confというサフィックスで作成されます。

$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

<VirtualHost *:443>タグの後に以下のディレクティブを挿入します。

Protocols h2 http/1.1
Enable HTTP/2 on Apache

変更を保存したら、Apacheウェブサーバーを再起動します。

$ sudo systemctl restart apache2

次のcurlコマンドを使用してHTTPヘッダーを取得し、HTTP/2が有効になっているかを確認します。

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

表示される出力が取得できるはずです。

HTTP/2 200

ブラウザでサイトをリロードします。そして、開発者ツールに戻り、’Protocol’列の’h2’ラベルでHTTP/2が示されていることを確認します。

Confirm HTTP/2 Protocol Version

Apacheとのmod_phpモジュールを使用する場合

Apacheとmod_phpモジュールを並行して実行している場合、PHP-FPMに切り替える必要があります。これは、mod_phpモジュールがprefork MPMモジュールを使用しており、これがHTTP/2に対応していないためです。prefork MPMをアンインストールし、mpm_eventモジュールに切り替える必要があります。

たとえばPHP 7.4 mod_phpモジュールを使用している場合、次のように無効にします:

$ sudo a2dismod php7.4 
Disable mod_php Module

その後、prefork MPMモジュールを無効にします。

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

モジュールを無効にした後、次に示すようにEvent MPMFast_CGI、およびsetenvifモジュールを有効にします。

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

UbuntuにPHP-FPMをインストール

次に、次に示すようにPHP-FPMをインストールして開始します。

$ sudo apt install php7.4-fpm 
$ sudo systemctl start php7.4-fpm

次に、PHP-FPMを起動時に有効にします。

$ sudo systemctl enable php7.4-fpm

次に、PHP-FPMをApacheのPHPハンドラとして有効にし、変更を反映するためにApache Webサーバーを再起動します。

$ sudo a2enconf php7.4-fpm

Apache UbuntuでHTTP/2サポートを有効にする

次に、以前と同様にHTTP/2モジュールを有効にします。

$ sudo a2enmod http2

すべての変更を同期するためにApacheを再起動します。

$ sudo systemctl restart apache2

最後に、サーバーがHTTP/2プロトコルを使用しているかどうかをテストするには、次に示すcurlコマンドを使用できます。

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Protocol in Apache

あなたは以前に文書化されたように、Google Chromeブラウザの開発者ツールを使用することもできます。このガイドの最後まで来ていただき、情報が役立つことを願っています。そして、ApacheHTTP/2を簡単に有効にできるようになりましたら幸いです。

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/