nmtysh.log

Tech系のネタや日々の独り言などを書いています。

nginxでレスポンスヘッダーにCache-Controlが含まれない場合がある

nginxを使ったシステムを構築した際につまずいたところがあったのでメモ。

・0.2%の確率でレスポンスにCache-Controlヘッダー、Expiresヘッダーが付与されない
nginx.conf で expires を使って上記ヘッダーを付与する設定にしていたのだけれど、何故かレスポンスヘッダーが付与されないケースがあった(1.7.9〜1.7.11)。

動作検証で問題がなかったので、本番に投入したらCache-ControlヘッダーがついてないレスポンスがあるせいでCDNに意図しない長時間のキャッシュが行われるようになってしまった。
検証で全く再現しないのでお手上げだったが、試しにJMeterで大量のアクセス(100req/10s * 60回)を発生させてみると再現できた。
どうも0.2%の確率でCache-ControlヘッダーとExpiresヘッダーつかない模様。
tracにはそれっぽいチケットは見つからず。
プログラム側でCache-Controlヘッダーを付与することにしてCDNのキャッシュ時間問題は解決できた。

状況と手順をもうちょっと整理できたらバグ報告してみるか。


最初はCDNを疑ってしまいました。ごめんなさい

追伸:
プログラム側の対応でもダメでした。
add_header Cache-Control で対応しました。