mod_pagespeed を用いた Apache の高速化(Ubuntu 上)
【概要】mod_pagespeed は、HTML・CSS・JavaScript・画像を自動的に最適化する Apache のモジュールである。Google 版の最終安定版は 2018 年の 1.13.35.2、Apache Incubator 版の最終リリースは 2020 年 8 月の 1.14.36.1 であり、Incubator のリポジトリは 2025 年 4 月 10 日にアーカイブされ読み取り専用になった。その後 We-Amp B.V. が保守を引き継ぎ、2026 年に mod_pagespeed 1.15 を公開している。Ubuntu 24.04 LTS では、保守されているパッケージを署名付き apt リポジトリから導入する。mod_pagespeed を使わない選択肢として、Apache 標準の mod_deflate、mod_brotli、mod_expires、HTTP/2 による高速化がある。
Google 配布版を使わない理由
dl-ssl.google.com で配布されている mod-pagespeed-stable_current_amd64.deb は、2018 年のビルドのまま更新されていない。このパッケージは libwebp、libpng、libjpeg-turbo、ICU を静的に同梱しており、2018 年以降に公表された脆弱性(例:libwebp のヒープオーバーフロー CVE-2023-4863)が修正されていない。mod_pagespeed は外部から送られた画像データを復号して書き換えるため、これらのライブラリは攻撃の対象になりうる。したがって、Ubuntu 24.04 LTS では保守されているパッケージを使う。
保守版 mod_pagespeed 1.15 のインストール(Ubuntu 24.04 LTS)
- 署名付き apt リポジトリを追加し、パッケージをインストールする。
curl -fsSL https://packages.modpagespeed.com/setup-apt.sh | sudo bash sudo apt install mod-pagespeed-stable - Apache を再起動して設定を反映する。
sudo systemctl restart apache2
パッケージはインストール時にモジュールを有効化し、設定ファイル /etc/apache2/mods-available/pagespeed.conf を配置する。ディレクティブ名とフィルタ名は Google 版と同一であるため、既存の設定はそのまま使用できる。無償で導入・評価できるが、本番環境での利用には商用ライセンスが必要である。ライセンスがない場合でも最適化は動作し、応答に X-PageSpeed-Warn: unlicensed ヘッダが付く。
有効化と基本設定
設定ファイル /etc/apache2/mods-available/pagespeed.conf を編集する。最小限の設定例を示す。
sudo nano /etc/apache2/mods-available/pagespeed.conf
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedFileCachePath /var/cache/mod_pagespeed/
ModPagespeedEnableFilters rewrite_css,rewrite_javascript,combine_css
</IfModule>
主要なディレクティブの意味は次の通りである。ModPagespeed on は最適化を有効にする。ModPagespeedFileCachePath は最適化結果を保存するディレクトリを指定する。ModPagespeedEnableFilters は適用する最適化フィルタを指定する。
設定ファイルを編集した後、構文を検査してから Apache を再起動する。
sudo apache2ctl configtest
sudo systemctl restart apache2
動作確認
モジュールが読み込まれていることを確認する。pagespeed_module (shared) と表示されれば読み込まれている。
apache2ctl -M | grep pagespeed
応答ヘッダを確認する。X-Mod-Pagespeed ヘッダにバージョン番号が表示されれば、書き換えが動作している。
curl -sI http://localhost/ | grep -i pagespeed
Apache 標準モジュールによる高速化
mod_pagespeed を導入しない場合でも、Ubuntu 24.04 LTS の Apache 2.4.58 に標準で含まれるモジュールで転送量とレスポンス時間を削減できる。
sudo a2enmod deflate
sudo a2enmod brotli
sudo a2enmod expires
sudo a2enmod http2
sudo systemctl restart apache2
各モジュールの役割は次の通りである。mod_deflate は gzip 圧縮、mod_brotli は Brotli 圧縮により、テキスト系コンテンツの転送量を削減する。mod_expires は Expires ヘッダと Cache-Control ヘッダを付与し、ブラウザキャッシュを利用させる。mod_http2 は HTTP/2 による多重化を行う。HTTP/2 を利用する場合は、prefork MPM ではなく event MPM を使い、PHP は php-fpm 経由で動作させる必要がある。