Я бы хотел, чтобы Varnish полностью игнорировал определенные URL-адреса на моих сайтах.
То есть, www.site1.com/fileuploader и www.site2.com/fileuploader.
У меня есть 4 веб-сайта в одном VCL, и все эти веб-сайты используют одну и ту же структуру URL-адресов, поэтому единственное, что изменяется, - это сам домен, URL-адреса, которые я хочу, чтобы Varnish игнорировал, одинаковы.
Я пробовал:
sub vcl_recv {
if (req.url ~ "^/fileuploader/\?"
) {
return(pipe);
}
}
Но не работает. При попытке загрузить через него PDF-файл появляется ошибка Varnish 503 Unavailable (та же ошибка, что и у меня, если я не менял конфигурацию). Если я пройду через nginx напрямую, используя его порт, он загрузится нормально.
Вот журнал этого инцидента:
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
Если вы хотите пройти его абсолютно нетронутым лаком, то лучший вариант - это return(pipe);
, который в основном указывает Varnish действовать как тупой TCP-прокси на время соединения.
Но то, что у тебя 503
ответ, похоже, подразумевает, что что-то еще не так - можете ли вы предоставить результат varnishlog
когда делается запрос на этот ресурс, если режим канала не работает?