我正在探索在IIS上运行的一组Web API之前使用HAProxy作为平衡器。
我们目前正在使用主机头来正确parsingIIS上正确的Web应用程序。 例如,我们可能使otherapp.mycompany.com运行在同一个服务器/端口上,但是使用主机头IIS知道要提供哪一个。
我在HAProxy最初的尝试给我留下了404错误,因为我没有在我的请求中包含主机头,所以IIS正在返回绑定到给定IP的默认站点,而不是通过主机名parsing。
修复给我留下了这样的东西:
frontend localnodes bind *:80 mode http default_backend nodes backend nodes mode http balance roundrobin option forwardfor reqirep ^Host: Host:\ node1.myapp.mycompany.com server web01 node1.myapp.mycompany.com:80
这对于单个后端来说是非常好的,但是我仍然在分头讨论如何包含正确的主机头,具体取决于哪个后端正在提供请求:
backend nodes mode http balance roundrobin option forwardfor reqirep ^Host: Host:\ node1.myapp.mycompany.com server web01 node1.myapp.mycompany.com:80 server web02 node2.myapp.mycompany.com:80
因为在IIS中不能正确parsingnode2,所以上面的方法是行不通的(在这种情况下,node2在不同的服务器上,因此IP不同),事实上,如果它们运行在同一台服务器/ ip上,我怀疑请求工作“工作”,但他们都将由node1每个主机头)。
check
也需要提供基于后端的正确的主机头,这将如何做? 编辑:我使用HA-Proxy版本1.7.9 2017/08/18
让我给这个多一点背景。 我们以前只有myapp.mycompany.com
提供api请求。 我们需要扩展它。 我们的客户仍然会打电话给myapp.mycompany.com
,但是这只是指向HAProxy,它将平衡到node1.myapp.mycompany.com
和node2.myapp.mycompany.com
。 我们目前的服务器configuration让我们在每个服务器上绑定一个IP地址,所以我们使用主机头来解决。
我不确定下面是否能正常工作,现在还不能testing,但是这样做还是有帮助的。 (稍后我会再看看一些时间):
解决scheme1:
backend nodes mode http balance roundrobin option forwardfor http-request set-header Host node1.myapp.mycompany.com if { srv_id 1 } http-request set-header Host node2.myapp.mycompany.com if { srv_id 2 } server web01 node1.myapp.mycompany.com:80 server web02 node2.myapp.mycompany.com:80
解决scheme2:
backend nodes mode http balance roundrobin option forwardfor http-send-name-header Host server node1.myapp.mycompany.com node1.myapp.mycompany.com:80 server node1.myapp.mycompany.com node2.myapp.mycompany.com:80