Ubuntu 22.04 の Apache で HTTP/2 を有効化する手順です。HTTP/2 は、TLS を有効化した HTTPS サイトで利用するのが基本です。この記事では、Apache TLS 設定が完了している前提で、HTTP/2 モジュールの有効化と確認方法を整理します。
HTTP/2 は Web サーバーの基本構築とは別の追加設定です。まず Apache の HTTP / HTTPS が正しく動くことを確認し、その後に HTTP/2 を追加します。
Apache HTTP Server ポケットリファレンス
Apache HTTP Server の設定、ディレクティブ、モジュール、運用項目を確認したい場合の参考書籍です。古い 2.0 / 2.2 系対応書籍のため、価格や在庫、現在の Apache 2.4 との差分はリンク先や公式ドキュメントで確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連する Apache 記事
Apache の基本設定、TLS、PHP、HTTP/2、WAF は役割が分かれます。必要な機能を順番に追加していくと、設定の責務を切り分けやすくなります。
- Ubuntu 22.04 Apache 基本構築 – VirtualHost と DocumentRoot を整理する
- Ubuntu 22.04 Apache TLS – 内部 CA 証明書で HTTPS を有効化する
- Ubuntu 22.04 Apache PHP 有効化 – libapache2-mod-php の設定と確認
- Ubuntu 22.04 Apache Web サーバー構築 HTTP/2 有効化
- Ubuntu 22.04 Apache Web サーバー構築 WAF 有効化
HTTP/2 を有効化する前提
| 項目 | 確認内容 |
|---|---|
| TLS | HTTPS VirtualHost が動作している |
| 証明書 | クライアント側で証明書検証が通る |
| mod_http2 | Apache の HTTP/2 モジュールを有効化する |
| Protocols | VirtualHost または全体設定で h2 http/1.1 を指定する |
| 確認 | curl --http2 やブラウザ開発者ツールで確認する |
HTTP/2 モジュールを有効化する
sudo a2enmod http2
sudo apache2ctl configtest
sudo systemctl reload apache2Protocols を設定する
サイト単位で HTTP/2 を有効化する場合は、TLS 用 VirtualHost に Protocols h2 http/1.1 を指定します。
sudo sed -i '/SSLEngine on/a\ Protocols h2 http/1.1' /etc/apache2/sites-available/server.example.local-ssl.conf
sudo apache2ctl configtest
sudo systemctl reload apache2sed での挿入が分かりにくい場合は、VirtualHost 内に次の行を明示的に入れるだけでも構いません。
Protocols h2 http/1.1設定例
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName server.example.local
DocumentRoot /var/www/server.example.local
SSLEngine on
Protocols h2 http/1.1
SSLCertificateFile /etc/ssl/local/server.example.local.crt
SSLCertificateKeyFile /etc/ssl/local/server.example.local.key
</VirtualHost>
</IfModule>curl で確認する
HTTP/2 対応の curl で確認します。環境によっては curl が HTTP/2 をサポートしていない場合があります。
curl -I --http2 https://server.example.local/
curl -v --http2 https://server.example.local/ 2>&1 | grep -i 'using http'内部 CA を使っている場合、クライアント側で CA 証明書を信頼していないと TLS 検証で失敗します。その場合は HTTP/2 の前に CA 信頼を確認します。
openssl で ALPN を確認する
HTTP/2 は TLS の ALPN で h2 が合意されるかが重要です。
openssl s_client \
-connect server.example.local:443 \
-servername server.example.local \
-alpn h2 \
-CAfile /etc/ssl/certs/ca-certificates.crt出力に ALPN protocol: h2 が表示されれば、HTTP/2 が選択されています。
MPM との関係
Apache の構成によっては、HTTP/2 と MPM の組み合わせを考える必要があります。特に mpm_prefork と mod_php の構成では、HTTP/2 の扱いに注意が必要です。PHP を使うサイトで HTTP/2 を重視する場合は、PHP-FPM と mpm_event の構成も検討します。
apache2ctl -V | grep -i mpm
apache2ctl -M | grep -E 'mpm|php|http2'運用上の注意
- HTTP/2 は TLS が安定してから有効化する
- 内部 CA の証明書を使う場合はクライアント側の CA 信頼を確認する
- PHP を使う場合は MPM と PHP 実行方式の組み合わせを意識する
- HTTP/2 が有効でも HTTP/1.1 をフォールバックとして残す
- WAF やリバースプロキシがある場合は経路全体で確認する
まとめ
Ubuntu 22.04 の Apache で HTTP/2 を有効化するには、mod_http2 を有効化し、TLS VirtualHost に Protocols h2 http/1.1 を指定します。
HTTP/2 は単独の設定ではなく、TLS、証明書検証、MPM、PHP 実行方式、WAF やプロキシ構成と関係します。まず HTTPS が正しく動くことを確認し、その上で curl や openssl s_client で HTTP/2 の合意を確認するのが安全です。



