我使用 nginx 和 proxy_cache 来缓存一些页面,我设置了一个单独的刷新位置块来刷新特定的缓存条目。我已经测试过了,它可以很好地进行刷新。
但是它还会缓存 set-cookie 标头(我使用的框架 Symfony 始终会为新用户创建新的会话 cookie,即使他们未登录)。我搜索了一下,显然 proxy_hide_header 应该可以帮我解决这个问题,但它只会隐藏返回给客户端的最终响应的标头,标头仍然被缓存。我也尝试对其他标头执行此操作,结果相同。我也尝试使用 headers_more_module(more_clear_headers),但这也无济于事。有人知道这里的问题是什么吗,或者有我正在尝试做的替代方法吗?我使用的是 nginx 1.11.2,这是配置:
location ~ /refresh(/.*) {
allow 127.0.0.1;
deny all;
rewrite ^/refresh?(/.*)$ $1 break;
proxy_hide_header "Set-Cookie";
proxy_ignore_headers "Set-Cookie" "Vary";
proxy_cache FOS_CACHE;
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_cache_key $uri$is_args$args;
proxy_cache_valid 200 1m;
proxy_cache_bypass 1;
access_log /var/log/nginx/cache_refresh.log cache_info;
}
谢谢
答案1
以下是一个想法。它能解决你的问题吗?
if ($http_cookie ~ "*"){
set $no_cache 1;
}
proxy_cache_bypass $no_cache;