ワールド・ワイド・ウェブ(www)の発足以来、HTTPプロトコルは年々インターネット上で安全かつ速くデジタルコンテンツを配信するために進化してきました。
最も一般的に使用されているバージョンはHTTP 1.1で、より早いバージョンの欠如を埋める機能の改善と性能最適化が盛んに行われています。しかし、HTTP/2で解決された特徴的な機能の他に、いくつかの欠如があることが指摘されています。
HTTP/1.1の制約は何でしょうか?
HTTP/1.1プロトコルは、特に高流量のウェブサーバを運用する場合に idealsに欠ける以下の欠如があるということです。
- HTTPヘッダーの長さによるwebページの読み込み遅延。
- HTTP/1.1は各TCP接続につき、1つのファイルにつき1つの要求しか送信できません。
- HTTP/1.1は各TCP接続に1つの要求だけを処理するため、ブラウザは同時に処理するために多数の並行なTCP接続を送信する必要があります。これはTCP Congestionを引き起こし、最終的には帯宽の無駄使いとネットワークの悪化につながります。
前述の問題は、パフォーマンスの劣化と带宽使用の高额なオーバーヘッド成本を引き起こしました。HTTP/2はこれらの問題を解決し、今ではHTTPプロトコルの未来です。
HTTP/2の利点
以下の利点を提供します。
- ヘッダー圧縮機能は、クライアント要求を最小限に抑え、帯宽消費を低下させます。結果的に、ページの読み込み速度が速くなります。
- 1つのTCP接続を介して複数のリクエストを多重化します。サーバーとクライアントの両方がHTTPリクエストを複数のフレームに分割し、他の端で再グループ化できます。
- これにより、より高速なWebパフォーマンスが実現され、それによりSEOランキングが向上します。
- ほとんどの主流ブラウザはHTTPS経由でHTTP/2をロードするため、セキュリティが向上します。
- HTTP/2は、ヘッダー圧縮機能のおかげで、モバイルフレンドリーと見なされます。
それにもかかわらず、私たちはApacheでUbuntu 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

出力から、この記事を書いた時点で最新のバージョンであるApache 2.4.41を使用していることがわかります。
Apache仮想ホストでHTTP/2を有効にする
始める前に、まずウェブサーバーがHTTP/1.1で実行されていることを確認してください。これは、Google Chromeの開発者ツールセクションを開き、Ctrl + SHIFT + I
の組み合わせキーでブラウザ上で行うことができます。’Network’タブをクリックし、’Protocol’列を見つけます。

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

次に、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

変更を保存したら、Apacheウェブサーバーを再起動します。
$ sudo systemctl restart apache2
次のcurlコマンドを使用してHTTPヘッダーを取得し、HTTP/2が有効になっているかを確認します。
$ curl -I --http2 -s https://domain.com/ | grep HTTP

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

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

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

モジュールを無効にした後、次に示すようにEvent MPM、Fast_CGI、およびsetenvifモジュールを有効にします。
$ sudo a2enmod mpm_event proxy_fcgi setenvif

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

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