Networking

基於標頭值的 HAProxy 動態伺服器地址

  • April 20, 2016

您好,我正在嘗試將流量路由回使用者電腦,以便在本地執行站點,但為 HAProxy 提供的其他來源獲取標頭/cookies/路由邏輯。到目前為止,雖然我還沒有弄清楚如何做到這一點。文件說環境變數的使用是可用的https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-server

地址字元串的任何部分都可以引用任意數量的環境變數,方法是在它們的名稱前加上一個美元符號 (’$’) 並可選地用大括號 (’{}’) 將它們括起來,類似於在 Bourne shell 中所做的。

但我想有一種使用acl或sample fetch的方法,但對於我來說,我無法弄清楚如何去做。以下是我嘗試過的一件事的範例。我已經通過刪除 ${hdr(originalIp)} 並使用我的 IP 完成了概念驗證,但如果 cookie 存在,我希望它動態使用請求者 IP

### Sample config
acl has_local_cookie cook_sub(local) -i true
use_backend local    if has_local_cookie
backend local
server local-origin ${hdr(originalIp)}:443 ssl verify none

您正在嘗試的問題在於,您將整個配置視為在執行時不斷被解析和解釋,當然事實並非如此。

各種指令的某些參數是靜態的,有些是動態的,但server聲明絕對是靜態的。伺服器只代表一個目標地址,而不是每個請求的不同地址。

您將需要為每個開發人員配置一個後端,或者您可以將它們全部放在一個後端中,backend local為每個開發人員使用一個伺服器聲明server dev-1 192.168.1.1:80 ...server dev-2 ..., 等。

然後use_backend local if { cook_sub(local) -i true }

然後在後端添加一個以將伺服器名稱與每個開發人員use-server的源 IP 匹配。use-server dev-1 if { src 192.168.1.1 }

請注意,這{ ... }是一個匿名 ACL,一種更簡潔(恕我直言)測試簡單條件的方法,尤其是當條件僅在配置中的一個位置進行評估時。如果您在多個地方測試相同的條件,命名 ACL 會更好,因為它們只在一個地方編輯,因此您不必像複製粘貼相同的匿名 ACL 那樣在多個地方更新它們配置。

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