Iis

配置 HAProxy 以包含不同後端的主機頭

  • July 12, 2021

我正在探索使用 HAProxy 作為在 IIS 上執行的一組 web api 前面的平衡器。

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

我們目前正在使用主機頭在 IIS 上正確解析正確的 Web 應用程序。例如,我們可能在同一伺服器/埠上執行 otherapp.mycompany.com,但使用 Host Headers IIS 知道要為哪一個提供服務。

我對 HAProxy 的最初嘗試給我留下了 404 錯誤,因為我的請求中沒有包含主機標頭,因此 IIS 正在返回綁定到給定 IP 的預設站點,而不是通過主機名解析。

修復給我留下了這樣的東西:

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

上面的內容在node2使用時不起作用,因為它在 IIS 中無法正確解析(在這種情況下,node2 在不同的伺服器上,因此在不同的 IP 上。事實上,如果它們在相同的伺服器/IP 上執行,我懷疑該請求工作“工作”,但它們都將由 node1 每個主機頭提供服務)。

  • 是否可以根據用於提供請求的後端 url 設置主機?
  • 如果是這樣,這意味著我check的 s 還需要基於後端提供正確的主機頭,那將如何完成?

編輯:我正在使用 HA-Proxy 版本 1.7.9 2017/08/18

讓我再多介紹一點背景。我們過去只是myapp.mycompany.com提供 api 請求。我們需要擴展它。我們的客戶仍然會呼叫myapp.mycompany.com,但這只會指向 HAProxy,它將平衡它到node1.myapp.mycompany.comnode2.myapp.mycompany.com。我們目前的伺服器配置讓我們在每台伺服器上綁定一個 IP 地址,因此我們使用主機頭來解析。

我不確定以下是否可行,並且現在無法測試,但也許這仍然有幫助。(稍後我會再看一遍):

解決方案1:

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

解決方案2:

注意 這個是官方不推薦的。閱讀關於http-send-name-header的評論:據報導,該指令目前被用作覆蓋傳出請求中的 Host 標頭欄位的一種方式;雖然這個技巧在一段時間內被認為是該功能的副作用,但它不受官方支持,並且可能在未來的版本中不再起作用,具體取決於此功能引起的技術困難…… [歸功於 rustyx。 ]

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

引用自:https://serverfault.com/questions/876871