mod_pagespeed を用いて Apache の高速化(Ubuntu 上)

この Web ページで行うこと

mod_pagespeed は,Apache の出力する HTML, CSS, JavaScript, 画像をサーバ側で自動的に書き換え(最小化,結合,画像の再圧縮,キャッシュ期間の延長など),転送量と読み込み時間を削減するモジュールである。

現在の提供状況:Google による開発は 2020 年のバージョン 1.13.35.2 で終了し,Apache Incubator の PageSpeed プロジェクトは 2023 年に retire,GitHub のリポジトリ(apache/incubator-pagespeed-mod など)は 2025 年にアーカイブされた。dl-ssl.google.com で配布されている .deb は 2018 年のビルドであり,更新されていない。現在保守されているのは We-Amp による mod_pagespeed 1.15 で,Business Source License 1.1 のもとで配布され,商用の本番利用にはライセンスが必要である(未ライセンスでも動作し,レスポンスに X-PageSpeed-Warn: unlicensed ヘッダが付く)。

関連する外部ページhttps://modpagespeed.com/download/

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは,パッケージ情報を最新の状態に保ち,インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。

Ubuntu のインストールはこちらの別ページで説明する。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now

Apache のインストール

端末で,次のコマンドを実行する。

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install apache2
# 動作確認 (active (running) と表示されることを確認)
systemctl status apache2

mod_pagespeed のインストール(Ubuntu 上)

apt リポジトリを登録してインストールする。対応するのは Ubuntu 22.04, 24.04(amd64, arm64)である。 端末で,次のコマンドを実行する。

# 署名鍵とリポジトリ定義 (/etc/apt/sources.list.d/modpagespeed.list) を登録
curl -fsSL https://packages.modpagespeed.com/install.sh | sudo sh
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install mod-pagespeed
sudo systemctl restart apache2

有効化と動作確認

インストール時にモジュールは有効化される。設定ファイルは /etc/apache2/mods-available/pagespeed.conf であり,ModPagespeed on で有効,ModPagespeed off で無効になる。 端末で,次のコマンドを実行する。

# モジュールの有効化 (すでに有効な場合はその旨が表示される)
sudo a2enmod pagespeed
# 設定ファイルの文法確認
sudo apache2ctl configtest
sudo systemctl restart apache2
# 動作確認: X-Page-Speed ヘッダが付いていれば動作している
curl -sI http://localhost/ | grep -i x-page-speed

Apache 標準モジュールによる高速化

mod_pagespeed を導入しない場合でも,Apache に同梱されているモジュールで転送量と待ち時間を削減できる。mod_deflatemod_brotli はテキスト系コンテンツの圧縮,mod_expires はブラウザキャッシュの期間指定,mod_http2 は HTTP/2 による多重化を行う。mod_http2 は prefork MPM では動作しないため,event MPM に切り替える。 端末で,次のコマンドを実行する。

sudo a2enmod deflate
sudo a2enmod brotli
sudo a2enmod expires
sudo a2enmod headers
# HTTP/2 は event MPM が必要 (mod_php を使用している場合は php-fpm へ移行しておく)
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod http2
# 設定ファイルの文法確認
sudo apache2ctl configtest
sudo systemctl restart apache2

HTTP/2 を使うには,仮想ホストの設定(例:/etc/apache2/sites-available/000-default.conf)に次の行を追加する。h2 は HTTPS 用,h2c は平文用である。

Protocols h2 h2c http/1.1

設定後,端末で,次のコマンドを実行して確認する。

sudo systemctl restart apache2
# 圧縮の確認 (Content-Encoding: gzip または br が返る)
curl -sI -H "Accept-Encoding: gzip, br" http://localhost/ | grep -i content-encoding