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


World Wide Web(www)の開始以来、HTTPプロトコルは、インターネットを介して安全で高速なデジタルコンテンツを配信するために、何年にもわたって進化してきました。

最も広く使用されているバージョンはHTTP1.1であり、以前のバージョンの欠点に対処するための機能拡張とパフォーマンスの最適化が含まれていますが、HTTP/2で対処された他のいくつかの顕著な機能には達していません。

HTTP/1.1プロトコルには次の欠点があり、特にトラフィックの多いWebサーバーを実行している場合は理想的ではありません。

  1. Delays in loading web pages due to long HTTP headers.
  2. HTTP/1.1 is only able to send one request for each file per TCP connection.
  3. Given that HTTP/1.1 processes one request for every TCP connection, browsers are forced to send a deluge of parallel TCP connections to simultaneously process the requests. This leads to TCP congestion and ultimately bandwidth wastage and network degradation.

上記の問題は、多くの場合、パフォーマンスの低下と帯域幅使用の高いオーバーヘッドコストにつながりました。 HTTP/2は、これらの問題に対処するために登場し、現在はHTTPプロトコルの未来です。

次の利点があります。

  1. Header compression that minimizes client requests and thereby lowers bandwidth consumption. The resultant effect is fast page load speeds.
  2. Multiplexing several requests over one TCP connection. Both the server and the client can break down an HTTP request into multiple frames and regroup them at the other end.
  3. Faster web performances which consequently lead to better SEO ranking.
  4. Improved security since most mainstream browsers loads HTTP/2 over HTTPS.
  5. HTTP/2 is considered more mobile-friendly thanks to the header compression feature.

そうは言っても、Ubuntu 20.04LTSとUbuntu18.04LTSのApacheでHTTP/2を有効にします。

開始する前に、HTTP/2を有効にする前に、ApacheWebサーバーでHTTPSを有効にしていることを確認してください。これは、すべての主流のWebブラウザーがHTTPSを介したHTTP/2をサポートしているためです。 Let’sEncrypt証明書を使用して保護されたApacheサーバーを実行しているUbuntu20.04上のインスタンスを指すドメイン名があります。

また、HTTP/2への移行を予定している本番サーバーには、Apache2.4.26以降のバージョンを使用することをお勧めします。

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

$ apache2 -v

出力から、この記事の執筆時点で最新バージョンであるApache2.4.41を使用していることがわかります。

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

開始するには、最初にWebサーバーがHTTP /1.1を実行していることを確認します。 Ctrl + SHIFT + I の組み合わせを使用して、Google Chromeの開発者ツールセクションを開くことにより、ブラウザでこれを行うことができます。 [ネットワーク]タブをクリックして、[プロトコル]列を見つけます。

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

$ sudo a2enmod http2

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

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

以下のディレクティブを タグの後に挿入します。

Protocols h2 http/1.1

変更を保存するには、ApacheWebサーバーを再起動します。

$ sudo systemctl restart apache2

HTTP/2が有効になっているかどうかを確認するには、次のcurlコマンドをshowとして使用してHTTPヘッダーをフェッチします。

$ curl -I --http2 -s https://domain.com/ | grep HTTP

表示された出力が得られるはずです。

HTTP/2 200

ブラウザで、サイトをリロードします。次に、開発者ツールに戻り、[プロトコル]列の h2 ラベルで示されているHTTP/2を確認します。

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

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

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

$ sudo a2dismod php7.4 

その後、プリフォーク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ハンドラーとして有効にし、変更を有効にするためにApacheWebサーバーを再起動します。

$ sudo a2enconf php7.4-fpm

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

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

$ sudo a2enmod http2

Apacheを再起動して、すべての変更を同期します。

$ sudo systemctl restart apache2

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

$ curl -I --http2 -s https://domain.com/ | grep HTTP

また、Google Chromeブラウザの開発者ツールを使用して、前述のように確認することもできます。このガイドの最後までお伝えします。この情報が貴重であり、ApacheでHTTP/2を簡単に快適に有効にできることを願っています。