2012-05-10 71 views
0

我想使用Varnish-cache來緩存我的Web應用程序的某些依賴項,但我被卡在一個公司代理設置後面。有沒有什麼辦法告訴Varnish-cache使其通過代理向其他服務發起http請求?如何在代理後使用varnish-cache

非常感謝

西蒙

回答

0

只要你可以用代理說話HTTP,你可以做任何你想要的。

示例設置:

[back-end A]   [back-end B] 
    |      | 
    ---[corporate proxy]--- 
       | 
      [Varnish] 

變化從80的默認端口的代理端口(如8080)...

backend corp_proxy { 
    .host = "proxy.localnet"; 
    .port = "8080"; 
} 
... 
sub vcl_recv { 
    ... 
    /* check if back-end A or B and use proxy as backend */ 
    if (req.http.host == "backend-a.example.com" || req.http.host == "backend-b.example.com") { 
     set req.backend = corp_proxy; 
     set req.http.X-Proxy-Pass = 'mypass'; 
    } 
    ... 
} 

你甚至可以設置自定義標題的請求(例如一些靜態鍵或其他)。

+0

非常感謝!這正是我所期待的。 –

+0

此配置是否在3.x上運行? –

+0

是的,給定的配置示例可以在3.x版本中使用。 –

0

對於varnish4這不起作用。做了一些網絡跟蹤,看起來varnish v4會執行相對req.url,代理需要絕對req.url 我處於裂腦DNS世界,所以我的後端與域名相同前端用戶可以看到(只是以不同的方式調整)。因此,我使用req.url變量中的req.http.host創建絕對URL。

sub vcl_recv { 
    # Setting backend hint 
    set req.backend_hint = varnish_backend; 
    if (req.url !~ "mydomain.com") { 
     set req.url ="http://" + req.http.host + req.url; 
}