忽略 Varnish Cache 上的某些 URL

忽略 Varnish Cache 上的某些 URL

我希望 Varnish 完全忽略我的网站上的某些 URL。

即 www.site1.com/fileuploader 和 www.site2.com/fileuploader

我在同一个 VCL 上有 4 个网站,所有这些网站都使用相同的 URL 结构,因此唯一改变的是域名本身,我希望 Varnish 忽略的 URL 是相同的。

我试过了:

sub vcl_recv {
    if (req.url ~ "^/fileuploader/\?"
        )  {
        return(pipe);
    }
}

但它不起作用。当我尝试通过它下载 PDF 时,出现了 Varnish 503 Unavailable 错误(如果我没有更改配置,也会遇到同样的错误)。如果我直接使用 nginx 的端口,则可以正常下载。

以下是此次事件的 varnishlog:

   16 ObjHeader    - Server: nginx/1.2.7
   16 ObjHeader    - Date: Wed, 17 Apr 2013 11:03:40 GMT
   16 ObjHeader    - Content-Type: application/pdf
   16 ObjHeader    - Content-Length: 1078550
   16 ObjHeader    - X-Powered-By: PHP/5.3.23-1~dotdeb.0
   16 ObjHeader    - Expires: Thu, 19 Nov 1981 08:52:00 GMT
   16 ObjHeader    - Set-Cookie: frontend=74go8sgckma5qrobnqc36pcjd4; expires=Wed, 17-Apr-2013 12:03:40 GMT; path=/; domain=www.site1.com; httponly
   16 ObjHeader    - Pragma: public
   16 ObjHeader    - Cache-Control: must-revalidate, post-check=0, pre-check=0
   16 ObjHeader    - Content-Disposition: attachment; filename=File-1338990998.pdf
   16 ObjHeader    - Content-Encoding: gzip
   16 ObjHeader    - Vary: Accept-Encoding
   30 FetchError   - Resource temporarily unavailable
   16 FetchError   - straight insufficient bytes

答案1

如果您希望它完全不受 Varnish 的影响,那么最好的选择是return(pipe);,它基本上告诉 Varnish 在连接持续期间充当哑 TCP 代理。

但是,您收到回复的事实似乎意味着其他事情是错误的——如果管道模式不起作用,503您能否提供对该资源进行请求时的输出?varnishlog

相关内容