WordPress の更なる高速化 HTTP/2 対応

前回、オンプレミス環境に WordPress を移設したことにより、高速化を果たしました。さらなる高速化のため、ウェブサーバの Apache を HTTP/2 にします。
HTTP/1.1 の場合、Chrome などのブラウザは、1つのドメインあたり最大6コネクションを確立できますが、各コネクション内で順番にファイルを受信するため、WordPress など1ページに大量のファイル(画像、JavaScript、CSSなど)があると、読み込みに時間を要することになります。
これを、HTTP/2 にすると、1つのコネクションの中で、複数のデータを細切れにして同時に送る Multiplexing が行われ、数十から数百のファイルを並列で送ることが可能となります。結果として、ページの表示速度がさらに上がるという理屈です。
現在のプロトコルを確認する
以降のコマンドやパスは、Red Hat 系(本ウェブサーバは RockyLinux)ですので、Ubuntu/Debian 系は適時読み替えてください。
curl -I https://makorin.org/
HTTP/1.1 200 OK
Date: Fri, 26 Dec 2025 10:18:52 GMT
省略HTTP/1.1 であることが分かります。以下、現在の PageSpeed Insights の結果です。遅延読み込み (Lazy loading) は OFF の状態です。
■デスクトップ

■携帯電話

必須条件の確認
HTTP/2 を動作させるための Apache モジュールである mod_http2 は、以下の条件を必要とします。
・PHP は PHP-FPM で動作していること
・MPM(mpm_event)が有効になっていること
・SSL 証明書による HTTPS 化が完了していること
まず、PHP-FPM が動作しているか確認します。動作していない場合、導入しましょう。
# 起動確認
systemctl status php-fpm
# 以下の出力があるかどうか確認する。
php-fpm.service; enabled
Active: active (running)
# PHP-FPMがポート9000でLISTENしているかも確認する。
ss -tunlp | grep 9000
tcp LISTEN 0 4096 127.0.0.1:9000 0.0.0.0:* users:(("php-fpm",pid=4605,fd=10) 以降省略次に、MPM の状態を確認します。”event” 以外(prefork)だった場合は、event に変更します。
httpd -V | grep -i mpm
Server MPM: eventApache の設定変更
HTTP/2 の使用を追記します。
# ApacheのSSL設定内に以下の記述を追加
vi /etc/httpd/conf.d/ssl.conf
--
<VirtualHost _default_:443>
SSLEngine on
SSLHonorCipherOrder on
省略
Protocols h2 http/1.1 ⇐ 追記
</VirtualHost>“Protocols h2 http/1.1” の記述は、h2 (HTTP/2 over TLS) を優先し、非対応なら http/1.1 を使うという指示になります。
変更したら Apache(httpd)を再起動します。
systemctl restart httpdプロトコルを確認します。”HTTP/2″ が表示されていれば変更は完了です。
curl -I https://makorin.org/
HTTP/2 200応答速度の確認
■デスクトップ

デスクトップは First Contentful Paint が 0.2秒、 Speed Index が 0.2秒、Largest Contentful Paint が 0.1秒が短縮できました。いい感じです。
■携帯電話

しかし、携帯電話では、First Contentful Paint が 2.1秒、 Speed Index が 4.0秒、Largest Contentful Paint が 5.9秒 も遅くなり、実用に耐えられない結果となりました。
PageSpeed Insights では、モバイル環境が厳しい通信条件でシミュレートしているはずなので、1つのコネクションで多数のファイルを並列で送る HTTP/2 とは相性が悪いものと予想できます。HTTP/1.1 は最大6コネクションでしたので、1つの通信で遅延(モバイル通信であればパケットロスなど)しても、他のコネクションがカバーできていたものと想定できます。
そこで、本質的な対処ではありませんが、携帯電話向けに画像の遅延読み込み (Lazy loading) を ON にしました。

遅延読み込み (Lazy loading) は OFF の状態で高速化を実現したかったところですが、携帯電話向けを考慮して ON とします。これでしばらく様子を見たいと思います。
重要事項
HTTP/1.1 と HTTP/2 の最大の動作の違いは、HTTP/1.1 では最大コネクション数が限られていて、HTTP/2 では1コネクションの中で無制限に近い並列処理が可能という点です。そのため、HTTP/2 にした場合は、理論上は JS と CSS の連結はしないほうがよい結果を得られる可能性が高いです。WordPress の構成にもよりますので、プラグインの設定を変更しながら性能結果を見て、最終的に決定してください。
HTTP/2 については、こちらも参照ください。メリットなど記載しています。
補足 CDN もあるじゃん
WordPress などのウェブサイトの表示高速化の手段として、CDN を活用する手もあります。HTTP/1.1 環境でも劇的に高速化するものと思います。ざっくりですが、CDN 利用のためには以下の手順を踏むことになります。
- CDN サービスにサインアップする
- DNS 設定を変更してドメイン宛の通信を CDN サーバに送る
- WordPress で URL の書き換えを行う(CDN URLに変更する)
しかしながら、上記の手順のとおり、DNS と WordPress のドメインに関する変更が伴います。そのため、次の何かしらのサーバやサイトの移設時などに注意すべき点が増えます。商用利用ならば CDN は積極的に推奨されますが、個人サイトの個人ウェブサーバでは、オーバースペックな対応では?と感じています。
