AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1068809
Accepted
Timothy R. Butler
Timothy R. Butler
Asked: 2021-07-07 09:11:40 +0800 CST2021-07-07 09:11:40 +0800 CST 2021-07-07 09:11:40 +0800 CST

如何避免在 NGINX 中使用“Vary: Cookie”标头进行疯狂缓存

  • 772

我知道Vary: Cookie它不太受欢迎,因为它会导致缓存用户可能报告的每个 cookie 变体。另一方面,如果没有它,我不得不Cache-Control: no-cache告诉我的 NGINX 缓存服务器完全跳过可能有用户登录的缓存内容(顺便说一下,我网站的每个页面,因为顶部有一个帐户框这页纸)。

我只在用户登录时发送 cookie,因此大多数页面视图都会从缓存中受益。我想缩小范围,以便只有两种变体:“差异”是没有cookie 的用户的缓存版本和有 cookie 的用户的非缓存版本(例如,用户已登录并拥有身份验证 cookie)。

如果我在我的 Perl 程序中添加“Vary: Cookie”,有没有办法告诉 NGINX 在这种情况下它应该只关注sessionIdcookie 是否存在?类似于 - 制作伪标题 - 的东西Vary: Cookie('sessionId')?如果有一种方法可以在 NGINX 会尊重的脚本生成的标头中实现这一点,我想我更喜欢将它放在 NGINX 配置中,但任何解决方案都会受到赞赏。

我不完全确定如何测试我是否会导致 NGINX 因缓存而疯狂,但我想知道这些方面是否可行:在未登录的查看器上,脚本发送Vary: Cookie,但在查看器上登录后,它会发送该标头和Cache-Control: no-cache. NGINX 会理解这是告诉它缓存第一个响应而不是变体吗?或者我会以我现在没有抓住的方式搞砸一些事情吗?

更新:这是我的一个服务器块的示例:

server {
    server_name myservername.tld
    listen 80;

    location / {
        proxy_cache $PROXY_CACHE;

        proxy_cache_valid 200 302 60m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout http_429 http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 1;
        proxy_cache_lock on;

        proxy_pass $scheme://$APACHE_PROXY_REQ_IP:$APACHE_PROXY_REQ_PORT;
    }

}
cache nginx http-headers
  • 1 1 个回答
  • 665 Views

1 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2021-07-07T09:46:56+08:002021-07-07T09:46:56+08:00

    您应该查看指令proxy_no_cache和proxy_cache_bypass.

    proxy_no_cache告诉 nginx 在什么条件下它不应该缓存来自您的应用程序的响应。您可以将其定义为您想要的任何内容,例如:

    proxy_no_cache $cookie_sessionid;
    

    proxy_cache_bypass在另一个方向上运行:它告诉 nginx 何时不应从缓存中提供请求,而是将其传递给您的应用程序,即使存在缓存条目也是如此。

    • 1

相关问题

  • 缩放大文件下载?

  • Gzip 与反向代理缓存

  • 如何禁用tomcat缓存?我遇到了奇怪的静态文件问题

  • mod_mem_cache 提供错误的内容!

  • NFS 缓存导致间歇性滞后

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve