Performance 第四:总是错过

Performance 第四:总是错过,performance,caching,varnish,varnish-vcl,Performance,Caching,Varnish,Varnish Vcl,我目前正在为我的域设置Varnish 4。 我的Varnish像charm一样缓存所有文件,除了DOC请求。 但我不明白,为什么文档请求总是被遗漏 我希望你们能帮助我 详情如下。如果你需要更多,告诉我 非常感谢你的帮助 问候,, 赫尔西 清漆版本: / # varnishd -V varnishd (varnish-4.1.3 revision 5e3b6d2) Copyright (c) 2006 Verdens Gang AS Copyright (c) 2006-2015 Varnish

我目前正在为我的域设置Varnish 4。 我的Varnish像charm一样缓存所有文件,除了DOC请求。 但我不明白,为什么文档请求总是被遗漏

我希望你们能帮助我

详情如下。如果你需要更多,告诉我

非常感谢你的帮助

问候,, 赫尔西

清漆版本:

/ # varnishd -V
varnishd (varnish-4.1.3 revision 5e3b6d2)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2015 Varnish Software AS
卷曲请求:

$ curl -s -D - "https://www.example.com" -o /dev/null
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 0
Cache-Control: max-age=0
Content-Type: text/html; charset=UTF-8
Date: Wed, 15 Nov 2017 20:25:14 GMT
Expires: Wed, 15 Nov 2017 20:25:14 GMT
Vary: Accept-Encoding
X-Cache: MISS
X-Cache-Age:
X-Cache-Grace:
X-Cache-Ttl-Remaining:
X-Hits: 0
X-Host: example.com
X-Varnish-Cookie-Debug: Cleaned request cookies:
Transfer-Encoding: chunked
清漆原木:

*   << BeReq    >> 786983
-   Begin          bereq 786982 pass
-   Timestamp      Start: 1510849297.605099 0.000000 0.000000
-   BereqMethod    GET
-   BereqURL       /
-   BereqProtocol  HTTP/1.1
-   BereqHeader    Host: www.example.com
-   BereqHeader    User-Agent: curl/7.26.0
-   BereqHeader    Accept: */*
-   BereqHeader    X-Forwarded-Host: www.example.com
-   BereqHeader    X-Forwarded-Port: 443
-   BereqHeader    X-Forwarded-Proto: https
-   BereqHeader    X-Forwarded-Server: lb-proxy-1
-   BereqHeader    X-Real-Ip: XXX.XX.XXX.XXX
-   BereqHeader    X-Forwarded-For: XXX.XX.XXX.XXX
-   BereqHeader    Accept-Encoding: gzip
-   BereqHeader    X-Device: desktop
-   BereqHeader    X-Varnish: 786983
-   VCL_call       BACKEND_FETCH
-   VCL_return     fetch
-   BackendOpen    23 boot.default XXX.XX.XXX.XXX 80 10.42.70.133 39122
-   BackendStart   XXX.XX.XXX.XXX 80
-   Timestamp      Bereq: 1510849297.619798 0.014699 0.014699
-   Timestamp      Beresp: 1510849297.676958 0.071859 0.057160
-   BerespProtocol HTTP/1.1
-   BerespStatus   200
-   BerespReason   OK
-   BerespHeader   Date: Thu, 16 Nov 2017 16:21:37 GMT
-   BerespHeader   Server: Apache
-   BerespHeader   Cache-Control: max-age=0
-   BerespHeader   Expires: Thu, 16 Nov 2017 16:21:37 GMT
-   BerespHeader   Vary: Accept-Encoding
-   BerespHeader   Content-Encoding: gzip
-   BerespHeader   Content-Length: 3252
-   BerespHeader   Content-Type: text/html; charset=UTF-8
-   TTL            RFC 0 10 -1 1510849298 1510849298 1510849297 1510849297 0
-   VCL_call       BACKEND_RESPONSE
-   BerespHeader   X-Varnish-Cookie-Debug: Cleaned request cookies:
-   BerespHeader   x-url: /
-   BerespHeader   x-host: www.example.com
-   BerespHeader   X-Cache: ZIP
-   BereqHeader    stale-while-revalidate: max-age=0
-   TTL            VCL -1 7200 0 1510849298
-   TTL            VCL 120 7200 0 1510849298
-   VCL_return     deliver
-   Storage        malloc Transient
-   ObjProtocol    HTTP/1.1
-   ObjStatus      200
-   ObjReason      OK
-   ObjHeader      Date: Thu, 16 Nov 2017 16:21:37 GMT
-   ObjHeader      Server: Apache
-   ObjHeader      Cache-Control: max-age=0
-   ObjHeader      Expires: Thu, 16 Nov 2017 16:21:37 GMT
-   ObjHeader      Vary: Accept-Encoding
-   ObjHeader      Content-Encoding: gzip
-   ObjHeader      Content-Length: 3252
-   ObjHeader      Content-Type: text/html; charset=UTF-8
-   ObjHeader      X-Varnish-Cookie-Debug: Cleaned request cookies:
-   ObjHeader      x-url: /
-   ObjHeader      x-host: www.example.com
-   ObjHeader      X-Cache: ZIP
-   Fetch_Body     3 length stream
-   Gzip           u F - 3252 10723 80 80 25946
-   BackendReuse   23 boot.default
-   Timestamp      BerespBody: 1510849297.677148 0.072049 0.000190
-   Length         3252
-   BereqAcct      328 0 328 247 3252 3499
-   End

*   << Request  >> 786982
-   Begin          req 786981 rxreq
-   Timestamp      Start: 1510849297.605008 0.000000 0.000000
-   Timestamp      Req: 1510849297.605008 0.000000 0.000000
-   ReqStart       10.42.115.200 35666
-   ReqMethod      GET
-   ReqURL         /
-   ReqProtocol    HTTP/1.1
-   ReqHeader      Host: www.example.com
-   ReqHeader      User-Agent: curl/7.26.0
-   ReqHeader      Accept: */*
-   ReqHeader      X-Forwarded-For: XXX.XX.XXX.XXX
-   ReqHeader      X-Forwarded-Host: www.example.com
-   ReqHeader      X-Forwarded-Port: 443
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      X-Forwarded-Server: lb-proxy-1
-   ReqHeader      X-Real-Ip: XXX.XX.XXX.XXX
-   ReqHeader      Accept-Encoding: gzip
-   ReqUnset       X-Forwarded-For: XXX.XX.XXX.XXX
-   ReqHeader      X-Forwarded-For: XXX.XX.XXX.XXX, 10.42.115.200
-   VCL_call       RECV
-   ReqUnset       X-Forwarded-For: XXX.XX.XXX.XXX, 10.42.115.200
-   ReqHeader      X-Forwarded-For: XXX.XX.XXX.XXX
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqHeader      Cookie:
-   ReqUnset       Cookie:
-   ReqUnset       Accept-Encoding: gzip
-   ReqHeader      Accept-Encoding: gzip
-   ReqHeader      X-Device: desktop
-   VCL_return     hash
-   VCL_call       HASH
-   VCL_return     lookup
-   Debug          "XXXX HIT-FOR-PASS"
-   HitPass        786980
-   VCL_call       PASS
-   VCL_return     fetch
-   Link           bereq 786983 pass
-   Timestamp      Fetch: 1510849297.677182 0.072175 0.072175
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     OK
-   RespHeader     Date: Thu, 16 Nov 2017 16:21:37 GMT
-   RespHeader     Server: Apache
-   RespHeader     Cache-Control: max-age=0
-   RespHeader     Expires: Thu, 16 Nov 2017 16:21:37 GMT
-   RespHeader     Vary: Accept-Encoding
-   RespHeader     Content-Encoding: gzip
-   RespHeader     Content-Length: 3252
-   RespHeader     Content-Type: text/html; charset=UTF-8
-   RespHeader     X-Varnish-Cookie-Debug: Cleaned request cookies:
-   RespHeader     x-url: /
-   RespHeader     x-host: www.example.com
-   RespHeader     X-Cache: ZIP
-   RespHeader     X-Varnish: 786982
-   RespHeader     Age: 0
-   RespHeader     Via: 1.1 varnish-v4
-   VCL_call       DELIVER
-   RespUnset      x-url: /
-   RespUnset      x-host: www.example.com
-   RespUnset      X-Cache: ZIP
-   RespHeader     X-Cache: MISS
-   RespHeader     X-Hits: 0
-   RespHeader     X-Host: example.com
-   RespUnset      Server: Apache
-   RespUnset      X-Varnish: 786982
-   RespUnset      Via: 1.1 varnish-v4
-   RespHeader     X-Cache-TTL-Remaining:
-   RespHeader     X-Cache-Age:
-   RespHeader     X-Cache-Grace:
-   VCL_return     deliver
-   Timestamp      Process: 1510849297.677222 0.072215 0.000040
-   RespHeader     Accept-Ranges: bytes
-   Debug          "RES_MODE 2"
-   RespHeader     Connection: keep-alive
-   Timestamp      Resp: 1510849297.677275 0.072268 0.000053
-   ReqAcct        290 0 290 446 3252 3698
-   End

例如,您提供的varnish日志与您执行错误的用户代理的curl请求不匹配

如果它仍然相关,您可以在varnishlog中看到后端请求包含以下标题:

BereqHeader    Cache-Control: no-cache
BereqHeader    Pragma: no-cache
后端响应包含以下内容

BerespHeader   Cache-Control: max-age=0
这会阻止Varnish缓存响应

您能否为请求而不是后端请求共享清漆日志部分

如果没有它,我的猜测可能是您总是会错过,因为builtin.vcl使您的请求成为pass,您在conf中不执行任何返回pass,尽管后端请求来自pass状态

它可能由builtin.vcl中的以下两个规则触发:

if (req.method != "GET" && req.method != "HEAD") {
    /* We only deal with GET and HEAD by default */
    return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
}
编辑

真奇怪。你不应该有任何曲奇使用卷曲。 尝试确定cookie处理代码的范围,并将req.http.cookie与大写C一起使用,如下所示:

if (req.http.Cookie) {
  # Remove Google Analytics Cookies, our server does not need it
  set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "_gat=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "utmctr=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "utmcmd.=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "utmccn.=[^;]+(; )?", "");

  # Remove DoubleClick offensive cookies
  set req.http.Cookie = regsuball(req.http.Cookie, "__gads=[^;]+(; )?", "");

  # Remove the Quant Capital cookies (added by some plugin, all __qca)
  set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", "");

  # Remove the AddThis cookies
  set req.http.Cookie = regsuball(req.http.Cookie, "__atuv.=[^;]+(; )?", "");

  # Remove a ";" prefix in the cookie if present
  set req.http.Cookie = regsuball(req.http.Cookie, "^;\s*", "");

  # Are there cookies left with only spaces or that are empty?
  if (req.http.Cookie ~ "^\s*$") {
      unset req.http.Cookie;
  }
}
这里的另一件事是,在vcl日志中,您可以看到Varnish正在执行按需操作,也就是说,Varnish正在缓存您的请求未被缓存的事实。如果您想真正进行测试,您需要在动手之前清除内容。
最后一件事:您的后端服务器apache使用一个缓存控件:max age=0头进行响应,该头阻止缓存,如果您想缓存内容,则应更改该头。

嘿,Benjamin,我非常感谢您的回答。我不太熟悉清漆和调试响应-请原谅我提供了错误的日志文件。为了给你们一个正确的请求日志,我做了一个新的请求。我把它们编辑成我的问题。我猜清漆会通过是因为剩下的饼干。。你怎么认为?
if (req.method != "GET" && req.method != "HEAD") {
    /* We only deal with GET and HEAD by default */
    return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
}
if (req.http.Cookie) {
  # Remove Google Analytics Cookies, our server does not need it
  set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "_gat=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "utmctr=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "utmcmd.=[^;]+(; )?", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "utmccn.=[^;]+(; )?", "");

  # Remove DoubleClick offensive cookies
  set req.http.Cookie = regsuball(req.http.Cookie, "__gads=[^;]+(; )?", "");

  # Remove the Quant Capital cookies (added by some plugin, all __qca)
  set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", "");

  # Remove the AddThis cookies
  set req.http.Cookie = regsuball(req.http.Cookie, "__atuv.=[^;]+(; )?", "");

  # Remove a ";" prefix in the cookie if present
  set req.http.Cookie = regsuball(req.http.Cookie, "^;\s*", "");

  # Are there cookies left with only spaces or that are empty?
  if (req.http.Cookie ~ "^\s*$") {
      unset req.http.Cookie;
  }
}