我想使用 Varnish-cache 来缓存我的 Web 应用程序的一些依赖项,但我被困在公司代理设置后面。有没有办法告诉 Varnish-cache 通过代理向其他服务发出 http 请求?
非常感谢
西蒙
对于 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;
}
只要你能和代理说 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';
}
...
}
您甚至可以在请求中设置自定义标头(例如一些静态键或其他)。