首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法开始使用清漆和Wordpress教程过时?

无法开始使用清漆和Wordpress教程过时?
EN

Stack Overflow用户
提问于 2021-03-14 17:27:32
回答 1查看 64关注 0票数 0

问题描述

我不能遵循官方教程带清漆的Wordpress。我正在使用wordpress 5.7 (当前版本)。

我有网络和wordpress的经验,我已经建立了一个功能测试wordpress容器与码头。我还启动了一个清漆容器,但是第一个问题是default.vcl文件--教程中有一个错误,它使用sub vcl_rec而不是sub vcl_recv。我修复了这个,容器就成功启动了。

我的default.vcl文件

按照本教程和其他一些信息来启用https (在Varnish前面是一个Traefik反向代理容器,它终止TLS连接),这是我的完整default.vcl文件,它至少应该为wordpress站点启用缓存。

代码语言:javascript
复制
backend default {
  .host = "wp";
}

sub vcl_recv{
  if (req.url ~ "wp-admin|wp-login") {
    return (pass);
  }

  if(!req.http.X-Forwarded-Proto) {
    set req.http.X-Forwarded-Proto = "http";
  }

  // Remove has_js and Google Analytics __* cookies.
  set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", "");
  // Remove a ";" prefix, if present.
  set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");

  set req.http.cookie = regsuball(req.http.cookie, "wp-settings-\d+=[^;]+(; )?", "");

  set req.http.cookie = regsuball(req.http.cookie, "wp-settings-time-\d+=[^;]+(; )?", "");

  set req.http.cookie = regsuball(req.http.cookie, "wordpress_test_cookie=[^;]+(; )?", "");

  if (req.http.cookie == "") {
    unset req.http.cookie;
  }
}

使用此vcl,站点将成功打开,但从未缓存任何内容。

CHROME DEV工具截图

以下是Chrome中网络面板的截图:

从一个教程,我希望看到一个工作的结果,但我认为有些东西是缺少的。据我有限的知识,我知道cookie阻止缓存--也许wordpress的新版本增加了一些额外的cookie?

检查原木

我使用命令varnishlog查看正在发生的事情,但我对它还不太了解。在我看来,那些可以阻止缓存被一个一个地成功删除的cookie?但为什么这是一个缓存错过呢?

让教程示例工作应该是可能的,而不必检查任何日志。尽管如此,它们仍在这里:

代码语言:javascript
复制
*   << BeReq    >> 3440655
-   Begin          bereq 3440654 fetch
-   VCL_use        boot
-   Timestamp      Start: 1615741331.296846 0.000000 0.000000
-   BereqMethod    GET
-   BereqURL       /
-   BereqProtocol  HTTP/1.1
-   BereqHeader    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
-   BereqHeader    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
-   BereqHeader    Accept-Language: en-US,en;q=0.9,sl;q=0.8
-   BereqHeader    Sec-Ch-Ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
-   BereqHeader    Sec-Ch-Ua-Mobile: ?0
-   BereqHeader    Sec-Fetch-Dest: document
-   BereqHeader    Sec-Fetch-Mode: navigate
-   BereqHeader    Sec-Fetch-Site: none
-   BereqHeader    Sec-Fetch-User: ?1
-   BereqHeader    Upgrade-Insecure-Requests: 1
-   BereqHeader    X-Forwarded-Host: removed manually
-   BereqHeader    X-Forwarded-Port: 443
-   BereqHeader    X-Forwarded-Proto: https
-   BereqHeader    X-Forwarded-Server: traefik
-   BereqHeader    X-Real-Ip: myip
-   BereqHeader    X-Forwarded-For: myip, 192.168.4.2
-   BereqHeader    host: removed-manually
-   BereqHeader    Accept-Encoding: gzip
-   BereqHeader    X-Varnish: 3440655
-   VCL_call       BACKEND_FETCH
-   VCL_return     fetch
-   BackendOpen    31 default 192.168.4.4 80 192.168.4.5 43538 connect
-   Timestamp      Bereq: 1615741331.297039 0.000193 0.000193
-   Timestamp      Beresp: 1615741331.325222 0.028376 0.028182
-   BerespProtocol HTTP/1.1
-   BerespStatus   200
-   BerespReason   OK
-   BerespHeader   Date: Sun, 14 Mar 2021 17:02:11 GMT
-   BerespHeader   Server: Apache/2.4.38 (Debian)
-   BerespHeader   X-Powered-By: PHP/7.4.15
-   BerespHeader   Link: <https://removed-manually.com/wp-json/>; rel="https://api.w.org/"
-   BerespHeader   Vary: Accept-Encoding
-   BerespHeader   Content-Encoding: gzip
-   BerespHeader   Content-Length: 3186
-   BerespHeader   Content-Type: text/html; charset=UTF-8
-   TTL            RFC 120 10 0 1615741331 1615741331 1615741331 0 0 cacheable
-   VCL_call       BACKEND_RESPONSE
-   VCL_return     deliver
-   Filters         testgunzip
-   Storage        malloc s0
-   Fetch_Body     3 length stream
-   Gzip           u F - 3186 8579 80 80 25423
-   BackendClose   31 default recycle
-   Timestamp      BerespBody: 1615741331.325436 0.028589 0.000213
-   Length         3186
-   BereqAcct      817 0 817 296 3186 3482
-   End

*   << Request  >> 3440654
-   Begin          req 3440653 rxreq
-   Timestamp      Start: 1615741331.296724 0.000000 0.000000
-   Timestamp      Req: 1615741331.296724 0.000000 0.000000
-   VCL_use        boot
-   ReqStart       192.168.4.2 59606 http
-   ReqMethod      GET
-   ReqURL         /
-   ReqProtocol    HTTP/1.1
-   ReqHeader      Host: removed-manually
-   ReqHeader      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
-   ReqHeader      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
-   ReqHeader      Accept-Encoding: gzip, deflate, br
-   ReqHeader      Accept-Language: en-US,en;q=0.9,sl;q=0.8
-   ReqHeader      Cache-Control: max-age=0
-   ReqHeader      Cookie: _ga=GA1.2.1969059563.1611504964; wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Sec-Ch-Ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
-   ReqHeader      Sec-Ch-Ua-Mobile: ?0
-   ReqHeader      Sec-Fetch-Dest: document
-   ReqHeader      Sec-Fetch-Mode: navigate
-   ReqHeader      Sec-Fetch-Site: none
-   ReqHeader      Sec-Fetch-User: ?1
-   ReqHeader      Upgrade-Insecure-Requests: 1
-   ReqHeader      X-Forwarded-For: myip
-   ReqHeader      X-Forwarded-Host: removed-manually
-   ReqHeader      X-Forwarded-Port: 443
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      X-Forwarded-Server: traefik
-   ReqHeader      X-Real-Ip: myip
-   ReqUnset       X-Forwarded-For: myip
-   ReqHeader      X-Forwarded-For: myip, 192.168.4.2
-   VCL_call       RECV
-   ReqUnset       Cookie: _ga=GA1.2.1969059563.1611504964; wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: ; wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: ; wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqUnset       Host: removed-manually
-   ReqHeader      host: removed-manually
-   VCL_return     hash
-   ReqUnset       Accept-Encoding: gzip, deflate, br
-   ReqHeader      Accept-Encoding: gzip
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       MISS
-   VCL_return     fetch
-   Link           bereq 3440655 fetch
-   Timestamp      Fetch: 1615741331.325474 0.028750 0.028750
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     OK
-   RespHeader     Date: Sun, 14 Mar 2021 17:02:11 GMT
-   RespHeader     Server: Apache/2.4.38 (Debian)
-   RespHeader     X-Powered-By: PHP/7.4.15
-   RespHeader     Link: <https://removed-manually.com/wp-json/>; rel="https://api.w.org/"
-   RespHeader     Vary: Accept-Encoding
-   RespHeader     Content-Encoding: gzip
-   RespHeader     Content-Length: 3186
-   RespHeader     Content-Type: text/html; charset=UTF-8
-   RespHeader     X-Varnish: 3440654
-   RespHeader     Age: 0
-   RespHeader     Via: 1.1 varnish (Varnish/6.5)
-   VCL_call       DELIVER
-   VCL_return     deliver
-   Timestamp      Process: 1615741331.325489 0.028765 0.000014
-   Filters
-   RespHeader     Accept-Ranges: bytes
-   RespHeader     Connection: keep-alive
-   Timestamp      Resp: 1615741331.325551 0.028827 0.000061
-   ReqAcct        907 0 907 402 3186 3588
-   End

有这么多信息,有人能帮我诊断出什么问题吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 14:40:17

基于VCL & VSL,我可以得出结论,您的站点是正确缓存的。

VCL代码只是为了扩展内置的VCL。

内置的VCL仅在以下情况下为缓存中的对象提供服务:

  • 对于GETHEAD请求
  • 当不存在Cookie头时
  • 当不存在Authorization头时

删除cookie的VCL逻辑就是这样做的。下面的VSL线路说明了这一点:

代码语言:javascript
复制
-   ReqUnset       Cookie: _ga=GA1.2.1969059563.1611504964; wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: ; wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: ; wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqUnset       Cookie: wordpress_test_cookie=WP%20Cookie%20check
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:

在这种情况下,请求被认为是可缓存的,并且会出现缓存外观。

下面的行显示缓存查找和后续缓存丢失:

代码语言:javascript
复制
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       MISS
-   VCL_return     fetch

别担心,缓存丢失只是一个尚未发生的命中事件。

日志中的fetch行指示访问WordPress后端。

对于要存储在缓存中的获取对象,内置的VCL也有一些规则:

  • TTL必须大于零。
  • 不能在no-cache头中提及no-storeprivate
  • 响应中必须没有Set-Cookie
  • 不允许对所有头(通过Vary: *)进行缓存更改

您正在返回的响应不会触发任何不可缓存的行为,因此Varnish决定将对象存储在缓存中。

下面的VSL行说明了这一点:

代码语言:javascript
复制
-   TTL            RFC 120 10 0 1615741331 1615741331 1615741331 0 0 cacheable

它还公开的是,对象将被缓存120秒。这是因为您的ExpiresCache-Control头部没有由WordPress设置。

下面是TTL行的语法:

代码语言:javascript
复制
%s %d %d %d %d [ %d %d %u %u ] %s
|  |  |  |  |    |  |  |  |    |
|  |  |  |  |    |  |  |  |    +- "cacheable" or "uncacheable"
|  |  |  |  |    |  |  |  +------ Max-Age from Cache-Control header
|  |  |  |  |    |  |  +--------- Expires header
|  |  |  |  |    |  +------------ Date header
|  |  |  |  |    +--------------- Age (incl Age: header value)
|  |  |  |  +-------------------- Reference time for TTL
|  |  |  +----------------------- Keep
|  |  +-------------------------- Grace
|  +----------------------------- TTL
+-------------------------------- "RFC", "VCL" or "HFP"

因为您的WordPress没有通过缓存头设置TTL,所以使用了default_ttl参数的值,默认为120秒。

但是,截图显示了带有Age: 4头的HTTP响应。这意味着在这种情况下,页面是从缓存中得到的,并且已经在缓存中存储了4秒。

也许是因为生命时间很短,所以假设页面没有缓存,但事实并非如此。

有两种方法可以解决这个问题:

  • 在您的Cache-Control: public, max-age=3600或webserver中设置一个WordPress响应头以增加TTL
  • 编写一些VCL以绕过TTL。

下面是一些可以添加到VCL文件中的VCL:

代码语言:javascript
复制
sub vcl_backend_response {
    set beresp.ttl = 1h;
}

对于存储在缓存中的每种类型的对象,此片段将将TTL设置为一个小时。1:https://github.com/varnishcache/varnish-cache/blob/6.0/bin/varnishd/builtin.vcl

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66627523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档