我正在尝试使用 Nginx 代理模块为我的网站进行缓存,并且有以下要求:
如果请求中有 cookie(在请求头中)
- 响应将使用 Nginx 的缓存
- 隐藏 Set-Cookie 标题行
如果请求中没有 cookie(在请求标头中)
- 转发请求到后端
- 不要隐藏 Set-Cookie 标头行
我使用 If (重写模块的)和任何指令:
if (!-e $http_cookie)
{
set $not_cache_rq 0;
set $not_cache_rp 0;
}
if ($http_cookie) {
set $not_cache_rq 1;
set $not_cache_rp 1;
}
proxy_cache_bypass $not_cache_rq;
proxy_no_cache $not_cache_rp;
proxy_hide_header Set-Cookie;
我不知道当标题行上有 cookie 而没有 cookie 时如何调用 cookie proxy_hide_header 选项。
请帮助我。非常感谢。
====
嗨,poige
我管理一个客户的网站。如果设置了cookie,则所有请求和响应都包含Cookie标头行。
如果响应被缓存了。Nginx 将为所有客户端返回该缓存,并且 Set-Cookie 头行将使所有用户共享一个 cookie 值(这个值是会话中的,对于每个用户来说它必须不同)。
我希望如果用户没有会话(即不存在 cookie - 请求标头行将没有 Cookie 行),则该请求将被推送到后端(apache)进行处理并将 cookie 返回给用户。
如果用户已经有会话(即请求行中有 cookie)那么 Nginx 将返回缓存,并且缓存中没有 Set-Cookie 行)
非常感谢!
答案1
如果您将 proxy_cache_key 设置为包含 cookie 变量的字符串,那么所有具有不同 cookie 的用户都将拥有其自己的页面缓存版本。
像这样
proxy_cache_key "$host$request_uri$cookie_auth_id";
这将允许缓存和为不同用户提供不同的页面。