【问题标题】:Varnish Vcl for multiple incoming and outgoing port connectionsVarnish Vcl 用于多个传入和传出端口连接
【发布时间】:2017-05-18 07:05:24
【问题描述】:

自从我使用 Varnish Cache 解决方案以来,只要配置与安装后的配置大致相同,一切都很好。

但现在我喜欢用 Varnish 做更多的事情。目前我正在为我的服务器使用以下设置:

访问者 -> CloudFlare -> HaProxy -> Varnish(单独的服务器)-> Apache2 内容。

我想知道的是,我如何能够制作正确的 vcl 脚本来接受来自端口 B 上的 ip A 的传入请求,并将其重定向到端口 D 上的 ip C。(而且不止一次。)

例子:

Default.Varnish 像这样很好地工作:

DAEMON_OPTS="-a :8085,:8087 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,768m"

但是现在关于 Varnish.Default :

backend default_1 { .host = "11.22.333.444"; .port = "8885"; }
backend default_2 { .host = "11.22.333.444"; .port = "8887"; }

我尝试了这样的事情:

sub vcl_recv {
 if (server.port == 8885) { set req.backend = default_1; }
 if (server.port == 8887) { set req.backend = default_2; }
}

(请注意,这两个请求都将发送到 相同的传出服务器。只是端口不同!)

对 Varnish 有足够了解的人已经知道我想要什么。我只是喜欢使用 Varnish 来代理基于不同端口的单独“通道”。

【问题讨论】:

  • 尝试设置req.backend_hint 而不是req.backend

标签: varnish haproxy varnish-vcl


【解决方案1】:

尝试检查 Varnish 绑定端口,而不是后端端口

sub vcl_recv {
 if (server.port == 8085) { set req.backend = default_1; }
 if (server.port == 8087) { set req.backend = default_2; }
}

【讨论】:

  • 在重新启动 Varnish 时得到这个答案:* 检查语法 varnishd ...失败!来自 VCC 编译器的消息:找不到符号:'server.port'(预期类型为 BOOL):('input' 第 20 行 Pos 6) if (server.port == 8085) { set req.backend = default_1; } -----###########------------------ --------- 运行 VCC-compiler 失败,退出 2
  • 可能与此有关(我忘了说我使用的是 Varnish 的第 4 版。):client.port 和 server.port 分别替换为 std.port(client.ip)和 std.port(server.ip) client.ip 和 server.ip 现在是正确的数据类型,默认情况下呈现为 IP 地址。您需要使用 std.port() 函数来获取端口号。在本文档中找到:varnish-cache.org/docs/4.0/whats-new/upgrading.html
  • 我卸载了 Varnish 版本 4 并安装了 3.0 只是为了让这个例程运行。稍后我们希望找到一种方法对版本 4 做同样的事情。所以现在我希望我做了正确的事情,接受了 Ghloogh 先生的答案作为解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-10-06
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
相关资源
最近更新 更多