nginxのproxy_cacheが効かないと思ったら response headers に Expires とかはいってると駄目なのね
移転しました。
nginxでproxy_cacheさせようと思ったけど、どうも効かない。
nginxのlogに $upstream_cache_status を出力してみたけど MISS ばっかりで HIT にならなかった。
http://wiki.nginx.org/HttpUpstreamModule#.24upstream_cache_status
調べていると、abコマンドでアクセスするとHIT. ブラウザからアクセスすると必ずMISS。
abコマンドは HTTP1.0, ブラウザからアクセスするとHTTP1.1の違いがあるぞ、
このあたりの違いによって何か違うんかなぁと思って調べていたら
--------
http://wiki.nginx.org/HttpProxyModule#proxy_cache
The following response headers flag a response as uncacheable unless they are ignored:
Set-Cookie
Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value
Expires with a time in the past
X-Accel-Expires: 0
--------
だって。response header に 特定の条件の値がある場合はキャッシュしないよと。
もう少し調べていったら proxy_ignore_headers を指定すると、これで指定した値は無視してキャッシュしてくれるようになる模様。
http://wiki.nginx.org/HttpProxyModule#proxy_ignore_headers
結局以下のように設定したら、HITしまくりますた。
--------
proxy_ignore_headers Expires;
--------
しばらく様子見てみよう。