基於標頭值的 HAProxy 動態伺服器地址
您好,我正在嘗試將流量路由回使用者電腦,以便在本地執行站點,但為 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 那樣在多個地方更新它們配置。