
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
파이프 모드가 트릭을 수행하지 않는 경우 해당 리소스에 대한 요청이 이루어질 때의 출력을 제공할 수 있습니까?