我们正在尝试为每个原始服务器设置主机标头,我们可以为每个后端设置,但我们在 Azure 应用服务上使用默认名称,因此该服务只会响应其自己的主机名,例如
http-request set-header Host example1.azurewebsites.net # 表示原始服务器 1
http-request set-header Host example2.azurewebsites.net # 用于原始服务器 2
但是,找不到任何在源服务器上设置它的方法
服务器 svr_example1 xx.xx.xx.xx:443 id 10 权重 10 maxconn 25 cookie exa1 检查 ssl 验证无
服务器 svr_example2 xx.xx.xx.xx:443 id 10 权重 10 maxconn 25 cookie exa1 检查 ssl 验证无
就像是
服务器 svr_example1 xx.xx.xx.xx:443 id 10 权重 10 maxconn 25 cookie exa1 检查 ssl 验证无 http 请求设置标头主机 example1.azurewebsites.net
服务器 svr_example2 xx.xx.xx.xx:443 id 11 权重 10 maxconn 25 cookie exa1 检查 ssl 验证无 http 请求设置标头主机 example2.azurewebsites.net
使用 haproxy 版本 1.8.28
答案1
它们是单独的指令,您必须将它们放在单独的行上,例如:
backend svr_example1
server svr_example1 xx.xx.xx.xx:443 id 10 weight 10 maxconn 25 cookie exa1 check ssl verify none
http-request set-header Host example1.azurewebsites.net
请注意,只有当 HAProxy 终止 TLS 时,您才能执行此操作。如果您正在通过 TLS,则无法执行此操作。
答案2
只是为了更新,最终实施了@Michael H 的建议,使用 2 个后端,每个后端都有自己的原始服务器和标头信息,然后在前端使用 nbsrv 来决定 BE 是否有效并从那里做出决定。
acl beExampleDead1 nbsrv(S_be_Example1) lt 1
acl beExampleDead2 nbsrv(S_be_Example1) lt 1
然后使用 acl 作为规则的一部分来决定后端
杰伊