configurationHAProxy以包含不同后端的主机头

我正在探索在IIS上运行的一组Web API之前使用HAProxy作为平衡器。

  • node1.myapp.mycompany.com
  • node2.myapp.mycomapny.com

我们目前正在使用主机头来正确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每个主机头)。

  • 是否可以根据用于提供请求的后端的url来设置主机?
  • 如果是这样,这意味着我的check也需要提供基于后端的正确的主机头,这将如何做?

编辑:我使用HA-Proxy版本1.7.9 2017/08/18

让我给这个多一点背景。 我们以前只有myapp.mycompany.com提供api请求。 我们需要扩展它。 我们的客户仍然会打电话给myapp.mycompany.com ,但是这只是指向HAProxy,它将平衡到node1.myapp.mycompany.comnode2.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