如何在 Nginx 上检查 Cookie 标头行和自定义缓存

如何在 Nginx 上检查 Cookie 标头行和自定义缓存

我正在尝试使用 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";

这将允许缓存和为不同用户提供不同的页面。

相关内容