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;

-------- 

しばらく様子見てみよう。