HAProxy 动态服务器地址
HAProxy dynamic server addresses
我们有与此图类似的设置
当请求到达 HAProxy 时,它会在任何服务器上进行循环平衡,后端服务器会检查其缓存,如果资源不在该服务器上,它会发出重定向 header 设置为正确的服务器 IP。
第二次请求到达 HAProxy,它检测到带有后端服务器的 header 在那里,但我如何获取该 IP 并将请求直接发送给它?
例如,第二次请求到达 haproxy 它有 header X-BACKEND-IP=10.0.0.5
所以 haproxy 尝试负载平衡该请求,我希望它读取 header,获取该 IP 并直接转到该后端。
这可能吗?如果没有,nginx 可以吗?
假设您愿意信任第二个请求的 header 中的 IP,那么可以,您可以使用 use-server
:
backend bk_foo
[...]
server srv_0a_00_01_05 10.0.1.5:80 weight 100
server srv_0a_00_02_05 10.0.2.5:80 weight 100
use-server %[req.hdr(x-backend-ip),lower,map_str(/etc/haproxy/hdr2srv.map,srv_any)] if { req.hdr(x-backend-ip),lower,map_str(/etc/haproxy/hdr2srv.map) -m found }
/etc/haproxy/hdr2srv.map
的内容:
#ip srv_name
# hex of IP used for names in this example
10.0.1.5 srv_0a_00_01_05
10.0.2.5 srv_0a_00_02_05
如果您需要关闭其中一台服务器,您应该动态更新地图以将其删除,以便再次重定向设置为 header 的请求。
如果你有多个后端,你可以用 use_backend
做类似的事情。
我们有与此图类似的设置
当请求到达 HAProxy 时,它会在任何服务器上进行循环平衡,后端服务器会检查其缓存,如果资源不在该服务器上,它会发出重定向 header 设置为正确的服务器 IP。
第二次请求到达 HAProxy,它检测到带有后端服务器的 header 在那里,但我如何获取该 IP 并将请求直接发送给它?
例如,第二次请求到达 haproxy 它有 header X-BACKEND-IP=10.0.0.5
所以 haproxy 尝试负载平衡该请求,我希望它读取 header,获取该 IP 并直接转到该后端。
这可能吗?如果没有,nginx 可以吗?
假设您愿意信任第二个请求的 header 中的 IP,那么可以,您可以使用 use-server
:
backend bk_foo
[...]
server srv_0a_00_01_05 10.0.1.5:80 weight 100
server srv_0a_00_02_05 10.0.2.5:80 weight 100
use-server %[req.hdr(x-backend-ip),lower,map_str(/etc/haproxy/hdr2srv.map,srv_any)] if { req.hdr(x-backend-ip),lower,map_str(/etc/haproxy/hdr2srv.map) -m found }
/etc/haproxy/hdr2srv.map
的内容:
#ip srv_name
# hex of IP used for names in this example
10.0.1.5 srv_0a_00_01_05
10.0.2.5 srv_0a_00_02_05
如果您需要关闭其中一台服务器,您应该动态更新地图以将其删除,以便再次重定向设置为 header 的请求。
如果你有多个后端,你可以用 use_backend
做类似的事情。