代理传递到清漆没有命中缓存

代理传递到清漆没有命中缓存

在我的 Web 服务器上,我有一个 varnish 实例,我想缓存第三方托管的网站(位于 blog.company.com/blog)。我有一个代理密码,因为网站的其余部分都在本地托管,我想让浏览器伪装成我们网站的一部分(company.com/blog)

(/etc/httpd/conf.d/proxy.conf)代理超时 300

# Blog
ProxyPass /blog http://localhost:8000
ProxyPassReverse /blog http://localhost:8000

我已经将 varnish 后端指向 blog.sugarsync.com:

backend default {
  .host = "70.40.204.127";
  .port = "80";
}

页面解析了,但实际上被重定向到了 blog.company.com/blog,而且从未命中缓存……varnishlog 在接收 GET 请求时显示“传递”函数,这意味着它不是,这很奇怪,因为我在自定义后端之外使用了 /etc/varnish/default.vcl 中的所有默认行为,所以它不应该传递它们……

   11 SessionOpen  c 127.0.0.1 46485 0.0.0.0:8000
   11 ReqStart     c 127.0.0.1 46485 394102336
   11 RxRequest    c GET
   11 RxURL        c /
   11 RxProtocol   c HTTP/1.1
   11 RxHeader     c Host: localhost:8000
   11 RxHeader     c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
   11 RxHeader     c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
   11 RxHeader     c Accept-Encoding: gzip,deflate,sdch
   11 RxHeader     c Accept-Language: en-US,en;q=0.8
   11 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
   11 RxHeader     c Cookie: __utmx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351630608:15552000; __utmx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351791703:155
   11 RxHeader     c scns-hdr-ip: 50.76.54.11
   11 RxHeader     c X-Forwarded-For: 10.5.112.22
   11 RxHeader     c X-Forwarded-Host: www.s.company.com
   11 RxHeader     c X-Forwarded-Server: www.company.com
   11 RxHeader     c Connection: Keep-Alive
   11 VCL_call     c recv
   11 VCL_return   c pass
   11 VCL_call     c pass
   11 VCL_return   c pass

奇怪的是,当我直接输入主机名(hostname.company.com:8000 或 company.com/blog)时,它会正确命中 varnish 缓存,但浏览器中的 URL 仍然被重定向。指向正确 URL(www.company.com/blog)的 Curl 也会命中缓存。子域名似乎也不起作用……这是怎么回事?

答案1

发生这种情况的原因pass是默认的 VCL 逻辑拒绝缓存请求标头中带有Authorization或 的任何内容Cookie,而您的请求带有Cookie

if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
}

该默认行为是出于谨慎考虑,以便服务器根据用户会话返回页面的不同内容;您可以在您的 中修改此行为vcl_recv。将您的实现作为默认行为的副本,但删除检查req.http.Cookie

if (req.http.Authorization) {
    /* Not cacheable by default */
    return (pass);
}

就重定向行为而言,听起来它正在得到一个30x响应,即重定向客户端浏览器 - 您能提供其中一次点击的日志吗?

相关内容