Posts
ExpiresActive の落とし穴
さくらサーバでは Header 命令が使えず、他の代替手段もなかったので、長い間キャッシュを制御できない状態が続いていたが、mod_expires モジュールの追加によって ExpiresActive が使えるようになった。
ということで、まずは画像がキャッシュされるようにした。
ExpiresActive On ExpiresByType image/gif "access plus 1 weeks" ExpiresByType image/jpeg "access plus 1 weeks" ExpiresByType image/png "access plus 1 weeks"
静的な HTML が多いサイトであれば、HTML ファイルもキャッシュの対象とすることもある。
ExpiresByType text/html "access plus 8 hours"
ここで注意すべき点は、ExpiresActive が MIME タイプでキャッシュ対象を識別しているということ。Header 命令のときは Files ディレクティブを使って拡張子による振り分けを行っていたので、CGI のような動的コンテンツと、それ以外の静的コンテンツがうまく分離されていたが、ExpiresActive は動的コンテンツであっても MIME タイプさえ一致すれば有効になってしまう。
結局のところは Header 命令と同じように Files ディレクティブと組み合わせて使うのが無難。
<Files ~ "\.(gif|jpg|jpeg|png)$"> ExpiresActive On ExpiresDefault "access plus 1 weeks" </Files>
CGI は独自のキャッシュヘッダーを出力することが多々あるので、キャッシュ設定を変更したときは、実際に出力される HTTP ヘッダーを確認しておくのがオススメ。Apache と CGI の両方でヘッダー出力を行った結果、同一ヘッダーが複数個出力されるような事態は回避しておきたい。