我想将请求负载平衡到三个后端上的同一端口。我有大约 20 个端口需要转发,所以我需要一种方法来使其动态化。这是为了为多个域平衡我们的生产、预生产、质量保证、开发、单元测试服务器。所以,是的,我可以使用 20 个后端、20 个 acl 和 20 个 use_backends 来实现这一点。但后来就忘了它吧。太麻烦了。
因此,我想使用一个变量来表示“请求的端口”。我尝试了 %[dst_port],因为这似乎在其他情况下有效。
我在某处读过 Willy T 的一个答案,如果省略端口,那么它只会转发到同一个端口。
但是它仍然需要服务端口或检查端口,除非我绑定到 20 个不同的前端,否则我事先不知道。
错误:服务器 X 没有服务端口,没有检查端口,也没有带端口信息的 tcp_check 规则“connect”。检查已被禁用。
例如。
listen load-balance
bind :28080
bind :42080
bind :48080
bind :58080
bind :38080
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost
server X 10.20.30.1 check %[dst_port]
server Y 10.20.30.2 check %[dst_port]
server Z 10.20.30.3 check %[dst_port]
你看,它需要一个变量。这可能吗?
(我的问题更加复杂,因为从技术上讲,理想情况下我需要一张从目标港口到检查港口的地图,但如果我能做到这个动态港口技巧,至少,现在就足够了。)
答案1
您需要使用以下配置进行配置
server X 10.20.30.1 check port 80
server Y 10.20.30.2 check port 80
server Z 10.20.30.3 check port 80
您可以只设置一个端口来检查健康状况,或者使用“external-check 命令”使用自己的脚本检查您的服务器......