wordpress - Varnish + Wordpress + Nginx-防止无存储无缓存必须重新验证 header

标签 wordpress nginx varnish varnish-vcl timber

大约一周前,我们启动了一个 Web 应用程序,遇到了严重的负载高峰,并关闭了近 2 个小时。我不会点名提及这家公司,但我们依靠他们的建议来防止这种情况发生。

他们说,由于我们使用了 Varnish,我们可以很容易地处理流量涌入。但是,我们没有验证缓存是否按预期工作。不是。

TLDR: 我们的网络应用程序正在发送 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 header 和请求,但没有说明原因。

在哪里可以防止发送这些 header ?

PHP:5.6
Nginx:1.4.6
Varnish :1.1
WordPress:4.6.12
木材:1.2.4

与我们合作的 linux 管理员表示,他们搜索了配置,但除了 AJAX 请求外,没有发现任何指定这些 header 的内容。

#dont cache ajax requests

if(req.http.X-Requested-With == "XMLHttpRequest" || req.url ~ "nocache" || req.url ~ "(control.php|wp-comments-post.php|wp-login.php|bb-login.php|bb-reset-password.php|register.php)")

这是我们正确配置 Varnish 以在网站上强制使用 HTTPS(force-https 插件)后缓存时的预启动 curl :
$ curl -Ik -H'X-Forwarded-Proto: *************
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Server: *****
Date: Sat, 03 Nov 2018 22:36:43 GMT
X-Varnish: 53061104
Age: 0
Via: 1.1 varnish
Connection: keep-alive

从发布后开始:
curl -ILk ***********
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
X-Varnish: 691817320
Vary: Accept-Encoding
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Type: text/html; charset=UTF-8
X-Server: ****
Date: Mon, 19 Nov 2018 19:17:02 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Transfer-Encoding: chunked
Accept-Ranges: bytes
Via: 1.1 varnish
Connection: Keep-Alive
Set-Cookie: X-Mapping-fjhppofk=33C486CB71216B67C5C5AB8F5E63769E; path=/
Age: 0

Force-https 插件:我们激活了它,更新了 Varnish 配置以避免重定向循环,并在发布前一周确认它正在工作。

插件:这些没有改变,除了 force-https。

Web 应用程序:它是之前应用程序的更新版本,完全重新设计,但据我所知,应用程序中没有任何内容指定要发送的 no-store no-cache header 。

我应该从哪里开始?谢谢!

最佳答案

发送这些 header 的是PHP引擎。

每当您启动 session 时,它都会这样做,这显然是基于Set-Cookie存在而发生的。

确保仅在绝对需要时才启动PHP session 。默认情况下,当响应同时包含Set-Cookie或“negative” Cache-Control时,Varnish不会缓存。

因此,摆脱无关的session_start()和/或setcookie()调用是这里的关键。

您可以找到有关何时可以期望发送here的反缓存 header 的更多信息。

关于wordpress - Varnish + Wordpress + Nginx-防止无存储无缓存必须重新验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397435/

相关文章:

caching - Varnish CentOS - 错误 503 后端获取失败

caching - Varnish和ESI,性能如何?

wordpress - Woocommerce:按自定义分类排序

php - 如何在 PHP 代码中添加 PHP 代码?

php - $_FILES 在使用 wordpress 自定义字段图像上传时为空,但它在核心 php 网站中工作

NGINX 缩略图生成在 Ubuntu 22 中不适用于空格或 %20,但在 Ubuntu 16 中有效 - Nginx 1.23.0 特定

Django Admin - CSRF 验证失败。请求中止

linux - 我正在尝试安装 Varnish

php - 在wordpress的常规设置选项卡中添加自定义字段

security - 在 Openshift 上以非 root 用户身份运行 nginx 并监听端口 80