手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Apache HTTP/2 有効化 – TLS VirtualHost で h2 を使う

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 は役割が分かれます。必要な機能を順番に追加していくと、設定の責務を切り分けやすくなります。

HTTP/2 を有効化する前提

項目確認内容
TLSHTTPS VirtualHost が動作している
証明書クライアント側で証明書検証が通る
mod_http2Apache の HTTP/2 モジュールを有効化する
ProtocolsVirtualHost または全体設定で h2 http/1.1 を指定する
確認curl --http2 やブラウザ開発者ツールで確認する

HTTP/2 モジュールを有効化する

sudo a2enmod http2
sudo apache2ctl configtest
sudo systemctl reload apache2

Protocols を設定する

サイト単位で 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 apache2

sed での挿入が分かりにくい場合は、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_preforkmod_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 が正しく動くことを確認し、その上で curlopenssl s_client で HTTP/2 の合意を確認するのが安全です。

Ubuntu 22.04 Apache HTTP/2 有効化 – TLS VirtualHost で h2 を使う

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る