我有多个虚拟机,每个虚拟机上的两个不同端口上都有两个服务。我想使用类似这样的 URL 访问这些服务http://虚拟网址1:80和http://virtual_url1:8080对于安装在第一个虚拟机上的虚拟机,依此类推。
我正在使用 varnish 将流量从硬件节点中继到虚拟节点。例如,我可以使用以下命令区分 virtual_url_1 和 virtual_url_2:
if (req.http.host == "virtual_url_1") {
set req.backend = virtual_node_1;
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
if (req.request == "POST") {
return(pipe);
}
return (lookup);
}
对于端口的区别,我已经看到 varnish 可以在 /etc/default/varnish 上监听不同的端口
DAEMON_OPTS="-a 0.0.0.0:80,0.0.0.0:8080 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"
但是现在,一旦被拦截,问题就是将流量从端口 80 中继到后端 80,将流量从端口 8080 中继到后端 8080。
有一个 req.http.host 变量,我正在寻找一个类似的 req.port 来执行此目的。
有人能给我一些建议吗?这可能吗?或者我应该运行两个不同的 varnish 实例(第一个在端口 80 上监听和回复,第二个在端口 8080 上监听和回复),我更愿意避免这种情况?
非常感谢!
答案1
使用server.port
vcl 中的变量就可以了。
您不必运行两个 varnish 实例!
请参阅man 7 vcl
了解更多变量及其相关信息。