如果 URL 变为不可缓存,proxy_cache_bypass 将继续提供旧的缓存响应

如果 URL 变为不可缓存,proxy_cache_bypass 将继续提供旧的缓存响应

正常情况下,使用时proxy_cache_bypassnginx 会从上游获取一份新的副本,并用新的副本覆盖缓存的响应。

但是,如果 URL 从可缓存变为不可缓存的响应(例如,变为带有 的 4xx 响应Cache-Control: no-cache),那么使用proxy_cache_bypass确实会从上游提供全新的副本,但它会将旧副本保留在缓存中。

这意味着每次请求 URL 时如果没有触发proxy_cache_bypass,它将继续提供旧的缓存。

我猜这是一种有意的行为,因为proxy_cache_bypass只有覆写通过保存新的响应来缓存响应,而no-cache响应意味着没有任何内容可保存?这是怎么回事?

我该如何解决这个问题?我不想为 4xx 响应启用缓存...

我正在运行 nginx/1.14.2

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my-cache:70m max_size=28g inactive=1d;
proxy_temp_path /var/cache/nginx/tmp;
proxy_cache my-cache;
proxy_cache_key $remote_user$scheme$host$request_uri;

proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504 http_429;

proxy_cache_bypass $http_cache_control;

proxy_read_timeout 90;
add_header X-Cache-Status $upstream_cache_status;

etag off;

答案1

你可以通过指定来告诉 nginx 仅缓存 200、301 和 302 响应

proxy_cache_valid 10m;

这告诉 nginx 缓存有效响应十分钟。

答案2

这是预期的行为。这就是为什么他们希望你使用付费版本来获得proxy_cache_purge指示

相关内容