読者です 読者をやめる 読者になる 読者になる

うまいぼうぶろぐ

linuxとhttpdとperlのメモ

Centos rpm httpd 2.2.3 ではFileEtag None が無視される

apache

http://httpd.apache.org/docs/2.2/ja/mod/core.html#fileetag
諸事情でバージョン指定、というかrpm指定されたapacheを使っています。で、複数台のwebサーバのローカルディスクにコンテンツを置いているので、(inodeが違うためサーバごとにEtag ヘッダが変わるのが嫌で)FileEtag None を設定したんだけど、相変わらずEtag ヘッダが返ってきてしまう。

FileEtag MTime Size などに設定すると、それぞれレスポンスヘッダのEtag は変更するので、FileEtag 自体が無効なわけではないっぽい。でもFileEtag None にしてもFileEtag All (default) と同じレスポンスヘッダになる。困る。

対処法

  • FileEtag Size にする

同じコンテンツをローカルディスクでそれぞれ持っていて、適当なタイミングで同期取ってるのでinodeは異なっているけど、sizeは一緒になる。
Mtime は同期の取り方次第。(更新時刻を保ったままコピーするか、コピーした時刻に更新時刻が上書きされるか: rsync でいうと-t をつけると更新時刻を保持する)
なので Size だけにするのが安全かな。

  • Header unset Etag する

mod_headers を使ってResponse Header から Etagを消す


ちなみに sourceで入れたapache 2.2.3 ではFileEtag None を設定すると、ちゃんと反映されてEtag ヘッダは消えていた。んー。