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 / 问题 / 786097
Accepted
luqo33
luqo33
Asked: 2016-06-25 07:34:27 +0800 CST2016-06-25 07:34:27 +0800 CST 2016-06-25 07:34:27 +0800 CST

当服务器设置 cookie 时使用 NGINX 处理缓存

  • 772

我使用NGINX microcaching获得了非常好的性能结果。

但是,我仍然不确定如何最好地处理具有Set-Cookie标头的服务器响应。

  • Set-CookieNGINX 是否可以缓存来自原始服务器的带有标头的响应?

如果答案是否定的,并且Set-Cookie响应应该始终绕过缓存层,这将对性能产生非常负面的影响。

例如,当您访问一个运行 WooCommerce 的普通电子商务网站时,这些 cookie 将在您第一次访问时设置:

设置 Cookie:PHPSESSID=xxyy

设置 Cookie:wp_woocommerce_session_xx=yy

如果Set-Cookie响应被排除在缓存之外,这意味着缓存的内容将永远不会在任何电子商务商店中首次访问时提供。

此外,在 WooCommerce 商店浏览产品时,该插件会设置woocommerce_recently_viewed=xxxxcookie。woocommerce_recently_viewedcookie 将在每个产品视图上更新,因此对其他产品的所有后续请求都会导致服务器包含Set-Cookie标头。

  • 在这种情况下可以启用缓存吗?

我在 NGINX 中使用的一些默认缓存配置包括:

  if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
  }

如果我woocommerce_recently_viewed在列表中包含 cookie,缓存大部分时间都会被绕过。

  • 在这种情况下处理缓存和 cookie 的最佳做法是什么?
cache nginx reverse-proxy
  • 2 2 个回答
  • 5416 Views

2 个回答

  • Voted
  1. Best Answer
    DerfK
    2016-06-25T08:25:37+08:002016-06-25T08:25:37+08:00

    一般来说,缓存对于动态内容的效果不佳,尤其是对于包含诸如“最近查看”之类的内容的内容,这些内容会改变每个单一页面的加载。如果您真的想使用缓存,那么第一步是禁用该插件,以便理论上可能会为某人提供两次相同的页面。第二步是仅在有人执行需要执行的操作时才启动会话:登录、将商品放入购物车等。从那时起,您将不得不在创建会话 cookie 后停止缓存(否则,如果客户只在一段时间内访问缓存,则会话将在客户和服务器端都过期)。

    我认为像这种缓存这样的内容最好在应用程序本身中完成。应用程序应该了解网页的哪些部分是动态的,并且需要在每次页面加载时重新生成,并且可以将网页从新的和使用过的部分组装起来,以便给用户正确的响应。

    • 3
  2. Brennen Smith
    2016-06-25T11:15:25+08:002016-06-25T11:15:25+08:00

    DerfK 对整个页面级别的动态内容是正确的,您绝对不希望发生 cookie 泄漏。

    但是,您可以在上游层进行更多缓存 - 特别是 WordPress,它具有不错的可插入对象缓存。这意味着,虽然页面本身不会被缓存,但您可以将大部分数据库负载存储在临时存储中,例如 memcached (batcache) 或 redis。这些 KV 存储比 MySQL 快得多,并且由于它们在对象和应用程序级别工作,它们不会直接受到 WooCommerce 发送的 cookie 的影响。

    • 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