🧭

Amazon Lightsail でHTTP/2を有効化してみた

に公開

最近、Amazon Lightsailを使ってWordPressサイトを立ち上げてみました。
開発を進める中で、google chromeのDevToolsからLighthouseを確認したところ、以下の表示がありました。せっかくなのでHTTP/2有効化に挑戦してみました。

"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing."

この記事では、私が実際に設定した手順やつまずいたポイントなどをまとめています。
同じようにLightsailでWordPressを運用している方の参考になれば嬉しいです。

初期セットアップ

サーバーの立ち上げから独自ドメインの設定、HTTPSの有効までは以下の記事を参考にしております。

AWS公式ドキュメント:Lightsail で WordPress インスタンスを起動して設定する

HTTP/2を有効化してみた

まずは使用してるバージョンを確認

google chromeのDevToolsでhttpのバージョンを確認します。
【network】タブの[Protcol]列に"http/1.1"がある事が確認できました。

[Protcol]列がない場合

[Status]列などの他の列の上で右クリックすると、表示/非表示を選択するメニューが表示されます。
[Protcol]にチェックを付けてください。

mod_http2モジュールを有効化

Bitnamiのドキュメントには、

Bitnamiスタックにはmod_http2モジュールがインストールされていますが、デフォルトでは有効化されていません。

と書かれていますが、なぜか実施していないのに有効化になっていました。
wordpressセットアップ中の何かの操作で勝手に有効化になるのでしょうか?

以下のコマンドで有効化になっているか、確認できます。

sudo apachectl -M | grep http2

有効化の場合、以下の出力になります。

http2_module (shared)

有効でない場合は、以下の出力になります。

Invalid command 'H2Direct', perhaps misspelled or defined by a module not included in the server configuration

mod_http2モジュールを有効化方法

有効化になっていない場合は、/opt/bitnami/apache/conf/httpd.confファイルを編集し、以下の行のコメントを解除してください。

  LoadModule http2_module modules/mod_http2.so

編集後は、Apache を再起動し有効化になっているか確認します。

sudo /opt/bitnami/ctlscript.sh restart apache
sudo apachectl -M | grep http2

参考:mod_http2モジュールを有効化

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

ブラウザベースの SSH クライアントを使用し設定していきます。

  1. デフォルトの Apache HTTP 仮想ホスト構成ファイル(/opt/bitnami/apache/conf/bitnami/bitnami.conf )に次のコードを追加する。
    </VirtualHost>の上に"Protocols h2 h2c http/1.1"と"H2Direct on"の2行を追加します。
  <VirtualHost _default_:80>
    ...
    Protocols h2 h2c http/1.1
    H2Direct on
  </VirtualHost>
  1. デフォルトの Apache HTTPS 仮想ホスト構成ファイル( /opt/bitnami/apache/conf/bitnami/bitnami-ssl.conf )に次のコードを追加する。
    1と同様に</VirtualHost>の上に"Protocols h2 h2c http/1.1"と"H2Direct on"の2行を追加します。
 <VirtualHost _default_:443>
    ...
    Protocols h2 h2c http/1.1
    H2Direct on
  </VirtualHost>
  1. /opt/bitnami/apache/conf/vhosts/ディレクトリ内に定義されている Apache 仮想ホスト ファイルに次のコードを追加する。
  <VirtualHost 127.0.0.1:PORT _default_:PORT>
    ...
    Protocols h2 h2c http/1.1
    H2Direct on
  </VirtualHost>

1,2と同様に</VirtualHost>の上に"Protocols h2 h2c http/1.1"と"H2Direct on"の2行を追加していくのですが、lsコマンドで確認すると複数ファイルあることが確認できます。
オレンジ枠で囲ったファイル、wordpress-https-vhost.confとwordpress-vhost.confに追記してください。

HTTP/2サポートが有効化できているか確認。

もう1度、google chromeのDevToolsでhttpのバージョンを確認します。
[Protcol]列が"h2"に変わっていることが確認できました。

[Protcol]列が"h2"に変わっていない場合

キャッシュの影響で変わっていない可能性があります。
シークレットウィンドウやキャッシュクリアを試してみてください。

参考

ApacheでHTTP/2サポートを有効にする
mod_http2モジュールを有効化

Discussion