nginx 缓存跟客户端缓存同步失效时间
当我通过以下配置设置nginx缓存时,我在 http://localhost:8080 这台服务器返回了 cache-control: max-age=2592000 以让 nginx 缓存动态内容一年,同时 nginx 也会把这个缓存头返回给客户端以缓存一年。这导致了nginx的失效时间跟客户端的失效时间不一致,虽然可以把返回给客户端的缓存头设置为0,但把客户端的缓存时间设置为nginx缓存内容失效时间更好,请问我该怎么做?
proxy_cache_path /path/to/cache keys_zone=mycache:10m levels=1:2 inactive=600s max_size=500m;
location /catch/ {
proxy_pass http://localhost:8080;
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_methods GET HEAD;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的业务服务器返回了 max-age 为1个月的缓存头,然后你又让反向代理的 nginx 又做了一个10分钟的缓存.
你希望 nginx 返回给用户的内容中,max-age 的过期时间等于 nignx 中缓存的过期时间?
你想客户端尽量缓存长的时间,又想服务端内容发生变化时,所有的客户端的缓存都在一个时间点过期?
这本身就是一个自相矛盾的想法
那就不要设置这个 max-age,也不要使用 proxy_cache, 把这个接口在业务层缓存(接口处理完的结果放到 memcache或redis).
如果你还想使用客户端缓存来让客户端尽量不要请求服务器,来降低流量,可以不要使用 nginx 的 proxy_cache,每个请求,你都根据请求的时间和预计资源更新的时间来计算除当次请求的 max-age. 也可以使用 redis 的 lua拓展或者 openresty 自己来写缓存的逻辑,这样就可以在返回给客户缓存时,替换掉 缓存的 max-age.