mod_expiresの欠点として、指定した時間中にブラウザからキャッシュの生存確認のリクエストが発生しなくなるので、その間に画像などのコンテンツを更新すると、ブラウザに間違ったコンテンツが表示されるし、cssやjava scriptなどに寿命を指定しているとサイトのレイアウトが崩れたりする。
この回避策としては、画像を更新するときに下記のようにファイルの名前を変えることで運用で対応できる。こういう風に更新すればキャッシュの寿命をかなり長くしても大丈夫だと思う。
[更新前]
sample-2016-10-30.jpg[更新後]
sample-2016-10-31.jpg
ブラウザのキャッシュとサーバー上のコンテンツが同一のものかを確認するためにEtagという仕組みを使ってファイルに固有の番号をつけて管理している。このEtagの値は、サーバーの設定によっては同一のコンテンツでも別の値になってしまう場合がある。
WEBサーバーが一台しかなければ問題がないが、ロードバランサーで負荷分散している場合に都合が悪いので、下記のようにファイルサイズを元にEtagを生成するように設定を変更して同じコンテンツであれば、どのサーバーでもEtagの値が必ず同じようになるようにしてやと良い。
FileETag Size