我想使用Varnish-cache來緩存我的Web應用程序的某些依賴項,但我被卡在一個公司代理設置後面。有沒有什麼辦法告訴Varnish-cache使其通過代理向其他服務發起http請求?如何在代理後使用varnish-cache
非常感謝
西蒙
我想使用Varnish-cache來緩存我的Web應用程序的某些依賴項,但我被卡在一個公司代理設置後面。有沒有什麼辦法告訴Varnish-cache使其通過代理向其他服務發起http請求?如何在代理後使用varnish-cache
非常感謝
西蒙
只要你可以用代理說話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';
}
...
}
你甚至可以設置自定義標題的請求(例如一些靜態鍵或其他)。
對於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;
}
非常感謝!這正是我所期待的。 –
此配置是否在3.x上運行? –
是的,給定的配置示例可以在3.x版本中使用。 –