【実録】WordPressの高速化を徹底検証:Apache・PHP-FPM三層分離とLCPチューニングの記録

パソコン

今回は、masa’s HP のパフォーマンス改善プロジェクトについて、構成・検証・結果をまとめます。Apache + PHP-FPM の三層分離、LCP 最適化、画像配信とセキュリティ強化まで、実運用での手順を記録しました。

スポンサーリンク

改善の出発点

種別パフォーマンス備考
デスクトップ97 → 76計測ぶれあり(TBT/CLSの影響)
モバイル67 → 55LCPは改善傾向、スコアはブレ
OS: AlmaLinux 9
Web: Apache 2.4.62
PHP-FPM: 8.3.x(pool: www / wp-frontend / wp-admin)
DB: MariaDB 10.x

Apache + PHP-FPM 三層分離

管理系と公開系を分離するため、PHP-FPM を www / wp-frontend / wp-admin の3プールに。Apache 側で URL ごとに FPM ソケットを切替えました。

動作検証(X-PHP-Pool ヘッダで確認)
curl -I https://hd0.biz/ | grep X-PHP-Pool # → www
curl -I https://hd0.biz/wpm/ | grep X-PHP-Pool # → wp-frontend
curl -I https://hd0.biz/wpm/wp-login.php | grep X-PHP-Pool # → wp-admin
curl -I https://hd0.biz/wpm/wp-admin/admin-ajax.php| grep X-PHP-Pool # → wp-admin(保険のLocationMatch)

セキュリティ強化と静的配信

/wp-content は Alias で分離し、PHP直叩きを禁止。必要なJSエンドポイントのみ例外許可にしました。

Alias /wp-content/ /var/www/html/wpm/wp-content/
<Directory "/var/www/html/wpm/wp-content"> Require all granted Options FollowSymLinks AllowOverride None <FilesMatch "\.(php|phps|phtml|phar|php\d?)$">Require all denied</FilesMatch>
</Directory> # 例外(許可)
RewriteEngine On
RewriteRule ^/wp-content/plugins/wp-multibyte-patch/wplink\.php$ - [L]
# 一括ブロック(禁止)
RewriteRule ^/wp-content/plugins/.*\.php$ - [F]
RewriteRule ^/wp-content/themes/.*\.php$ - [F]

検証:

curl -I https://hd0.biz/wp-content/plugins/wp-multibyte-patch/wplink.php # → 200(JS出力)
curl -I https://hd0.biz/wp-content/plugins/wp-multibyte-patch/wpmp-config-sample-ja.php # → 403(直叩き禁止)

LCP 高速化(fetchpriority / preload)

トップの LCP 候補画像(SVG ロゴ)を先読みし、優先度を上げました。

# MUプラグインでHTTPヘッダにLink付与
header('Link: </wp-content/uploads/2025/10/masasHP_logo_unified_blue_centered_symm.svg>; rel=preload; as=image; fetchpriority=high', false);

数式を KaTeX で表すと、LCP は概ね次式で近似できます:

$$ \mathrm{LCP} \approx \mathrm{NetworkDelay} + \mathrm{RenderDelay} + \mathrm{ImageDecodeTime} $$

画像配信と Vary ヘッダ

AVIF/WebP 配信に備えて Vary: Accept を付与。

<LocationMatch "^/wp-content/uploads/"> <IfModule mod_headers.c>Header merge Vary Accept</IfModule>
</LocationMatch>

結果と考察

  • LCP(Desktop) ≈ 2.2s、LCP(Mobile) 改善傾向。
  • CLS 0.324 → 0.116(サイズ先取りで安定)。
  • TBT は一時的に増加(今後は defer 最適化で低減予定)。

計測スコアは回線・CPU設定で±15〜20程度ブレるため、中央値で評価しています。体感では描画の安定性が向上し、再描画やカクつきが減少しました。

今後の予定

  • 非クリティカルJSの defer 化(TBT削減)
  • LCP 自動検出ログの導入
  • サーバ側 TTFB の定点観測
  • (長期)Cocoon からブロックテーマへの移行検証

まとめ

Apache / PHP-FPM / WordPress の三層構成と、静的配信・セキュリティ・LCP 制御を総合的に整えました。点数の“波”よりも、実ブラウザでの安定表示を優先する方針です。次は JS 最適化と TTFB 観測で、さらに一段上を目指します。