Varnish Cache で特定の URL を無視する

Varnish Cache で特定の URL を無視する

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ますか?

関連情報