
haproxy.cfg의 환경 변수가 HA-Proxy 버전 1.5.2에서 작동하지 않는 이유를 알아내려고 합니다.
명령줄에서 Printenv를 사용하여 FE_PORT_8000_TCP_ADDR=172.17.0.4와 같은 환경 변수 목록을 얻습니다.
haproxy.cfg에서 사용해야 합니다. this 및 문서에 따르면 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
/etc/init.d/haproxy
service 명령을 사용하여 중지/시작하고 있으므로 서비스를 제어하는 대화형 터미널 세션( )이 아닌 init 스크립트(예: 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 셸에서 수행되는 것과 유사하게 선택적으로 중괄호("{}")로 묶어야 합니다. 변수 이름에는 영숫자 또는 밑줄 문자("_")가 포함될 수 있지만 숫자로 시작해서는 안 됩니다.
답변3
답변4
/etc/init.d/haproxy
파일에 다음 코드 조각이 포함되어 있다고 가정합니다 .
#!/bin/sh
...
BASENAME=haproxy
...
if [ -e /etc/default/${BASENAME} ]; then
. /etc/default/${BASENAME}
fi
...
, 그렇다면 좋은 해결책은 /etc/default/haproxy
대신 파일을 통해 추가 변수를 전달하는 것입니다.
... Johan Gov가 언급한 바와 같이:https://serverfault.com/a/841307/608437