
Varnish で Web サイト上の特定の URL を完全に無視してほしいです。
つまり、www.site1.com/fileuploader と www.site2.com/fileuploader
同じ VCL 上に 4 つの Web サイトがあり、それらの Web サイトはすべて同じ 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
ますか?