nginx 缓存跟客户端缓存同步失效时间

发布于 2022-09-12 04:40:57 字数 892 浏览 13 评论 0

当我通过以下配置设置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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨后咖啡店 2022-09-19 04:40:57

你的业务服务器返回了 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文