うまいぼうぶろぐ

linuxとhttpdとperlのメモ

.html拡張子でSSIを有効にする

効率の良い方法

XBitHack Full

として、SSIを実行したいhtmlファイルに実行権限をつける。XBitHack Onでもいい。Fullにするとグループに実行権限が付いているとファイルの修正時刻がLast-Modifiedヘッダで返される。そのためSSIを使っていてもクライアントにキャッシュさせられる。
ただし、includeしている先のファイルが更新されても、Last-Modifiedヘッダは変更されないので、includeしているファイルを更新しただけでも、clientがアクセスする対象のindex.html ファイル等の更新日時を最新にする必要がある。

また、cgiをincludeする場合などでキャッシュされると困るときはXBitHack Onで。

良くない設定

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml .html

この方法について注意することは、たとえ SSI ディレクティブを全く含まない場合でも、Apache がクライアントに 送る全てのファイルを最後まで読み込ませることになります。 この方法はかなり処理を遅くするものであり、良くないアイデアです。


※ 追記
とあるサイトで、実際にabでベンチマークしたら結果はほぼ変わらなかった。XBitHackのほうが2%程度良かったぐらい。(適当にベンチマークしたので2%ってのも怪しいけど) 運用上の手間を考えると、大規模サイトでなければAddOutputFilterで十分かな。

※ 追記2
いやいや、abの結果で見てもダメじゃないか、間違えていた。AddOutputFilter INCLUDES .htmlすると、全てのhtmlファイルに対してclientがキャッシュできなくなるのが問題なのだ(アクセスする度に304ではなくて200が返る)。まーmod_expiresもつかって、expiresヘッダ返せばキャッシュはできるけど。