在 haproxy.cfg 中使用 HaProxy 環境變數不起作用

在 haproxy.cfg 中使用 HaProxy 環境變數不起作用

試圖找出為什麼 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

我遇到了同樣的問題,但在 Debian 8 (Jessie) 上並將其設定/etc/init.d/haproxy不起作用。我透過/etc/default/haproxy像這樣設定變數來修復它(export不需要)

FE_PORT_8000_TCP_ADDR=172.17.0.4

欲了解更多信息,請參閱我的問題回答關於我的問題。

答案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

相關內容