【HTTP】apache、IISはデフォルトでETag生成にinodeを利用。複数サーバ構成では注意

サーバーをリプレースしたらキャッシュが機能しない!助けて!と問い合わせがあったので、調べたらETagを使っていた。

スポンサーリンク




目次

複数サーバ構成でETag利用

apacheやIISはETagを「iNode」+「ファイルサイズ」+「更新日時」で生成している。
そのため、複数サーバ構成でLBでバランシングするような構成だと、inodeが変わるのでETagのハッシュ値が変わってキャッシュが効かなくなる。
(同じサーバに割り振られ続ければ問題はないが)

対策1

ETagの実装をやめて、Last-Modified および If-Modified-Sinceでキャッシュを実装する。
※ETag/If-None-MatchはLast-Modified/If-Modified-Sinceより優先度が高い。

対策2

WebサーバのETag生成ルールを変更して、「iNode」を使わなくする
ちなみに、apache・IISはデフォルトでiNodeを使う。nginxはデフォルトで使わない(ファイルサイズ+更新日時で生成)

参考サイト

静的ファイルのキャッシュコントロールについて ISUCON7 – そろそろちゃんとやります
Last-Modified および If-Modified-Since
HTTPキャッシュ。なぜ嫌われるのか。 – それマグで!
If-None-Match
DSAS開発者の部屋:負荷分散環境でブラウザキャッシュが効かないときは – ETagの解説 –

スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする