
試圖找出為什麼 haproxy.cfg 中的環境變數在 HA-Proxy 版本 1.5.2 中不起作用
在命令列上,使用 Printenv 我得到了環境變數列表,例如 FE_PORT_8000_TCP_ADDR=172.17.0.4
我需要在 haproxy.cfg 中使用它。根據這個和文檔 如何在 haproxy.conf 中使用環境變數 使用 $FE_PORT_8000_TCP_ADDR 或 ${FE_PORT_8000_TCP_ADDR} 應該可以。但這是行不通的。
在 Haporxy.cfg 中,硬編碼確實有效,並在瀏覽器中訪問,它按預期顯示:
backend FE
# balance roundrobin
server FE1 172.17.0.4:8000 maxconn 256
但具有相同假定值的環境變數卻沒有,在瀏覽器中它給出 503 Service Unavailable。
backend FE
# balance roundrobin
server FE1 $FE_PORT_8000_TCP_ADDR:8000 maxconn 256
關於做錯了什麼有什麼想法嗎?
更新:此人有看起來相同的問題 如何在 haproxy.conf 中使用環境變數
答案1
由於您要使用 service 命令停止/啟動,因此您需要在 init 腳本(例如/etc/init.d/haproxy
在 ubuntu 上)中指定環境變量,而不是在控制服務的互動式終端會話中指定環境變數 ( service haproxy start
)。您可以驗證 proc 檔案系統中特定 pid 可用的環境變數。如果您檢查您的 haproxy,它可能只有 TERM 和 LANG,因為這是透過服務傳遞到 init 腳本的唯一環境(服務手冊頁)。
# cat /proc/$(pgrep haproxy)/environ
如果不是從 init 腳本啟動守護程式 haproxy,而是直接執行 haproxy,您可能會看到您正在尋找的行為:
# haproxy -f /etc/haproxy/haproxy.cfg
若要解決此問題,請編輯 init 腳本/etc/init.d/haproxy
並在其中設定變數:
export FE_PORT_8000_TCP_ADDR=172.17.0.4
答案2
有同樣的問題。透過在環境變數周圍添加雙引號來修復它。
正如所解釋的這裡(2.3.環境變數)
HAProxy 的配置支援環境變數。這些變數僅在雙引號內解釋。變數在配置解析期間擴展。變數名稱前面必須有美元(“$”),並且可以選擇用大括號(“{}”)括起來,類似於 Bourne shell 中的操作。變數名稱可以包含字母數字字元或字元底線(“_”),但不應以數字開頭。
答案3
答案4
假設該/etc/init.d/haproxy
檔案包含以下程式碼片段:
#!/bin/sh
...
BASENAME=haproxy
...
if [ -e /etc/default/${BASENAME} ]; then
. /etc/default/${BASENAME}
fi
...
,那麼一個好的解決方案就是透過/etc/default/haproxy
文件傳遞附加變數。
……正如約翰‧戈夫也提到的:https://serverfault.com/a/841307/608437