
Intentando descubrir por qué las variables ambientales en haproxy.cfg no funcionan en HA-Proxy versión 1.5.2
en la línea de comando, usando Printenv obtengo una lista de variables ambientales como FE_PORT_8000_TCP_ADDR=172.17.0.4
Que necesito usar en haproxy.cfg. Según esto y los documentos. ¿Cómo puedo usar variables de entorno en haproxy.conf? usar $FE_PORT_8000_TCP_ADDR o ${FE_PORT_8000_TCP_ADDR} debería funcionar. Sin embargo, eso no está funcionando.
En Haporxy.cfg, la codificación SÍ funciona y, al acceder a ella en un navegador, se muestra como se esperaba:
backend FE
# balance roundrobin
server FE1 172.17.0.4:8000 maxconn 256
Pero la variable ambiental con el mismo valor supuesto no es así, en el navegador muestra 503 Servicio no disponible.
backend FE
# balance roundrobin
server FE1 $FE_PORT_8000_TCP_ADDR:8000 maxconn 256
¿Alguna idea sobre lo que se está haciendo mal?
ACTUALIZACIÓN: Esta persona tiene lo que parece ser el mismo problema ¿Cómo puedo usar variables de entorno en haproxy.conf?
Respuesta1
Dado que está deteniendo/iniciando con el comando de servicio, debe especificar las variables de entorno en su script de inicio (por ejemplo, /etc/init.d/haproxy
en ubuntu), no en su sesión de terminal interactiva donde controla el servicio ( service haproxy start
). Puede verificar las variables de entorno disponibles para un pid específico en el sistema de archivos proc. Si verifica el suyo en busca de haproxy, probablemente será solo TERM y LANG, porque ese es el único entorno que se pasa a través del servicio al script de inicio (página de manual para el servicio).
# cat /proc/$(pgrep haproxy)/environ
Si en lugar de iniciar haproxy demonizado desde el script de inicio ejecuta haproxy directamente, probablemente verá el comportamiento que está buscando:
# haproxy -f /etc/haproxy/haproxy.cfg
Para resolver esto, edite el script de inicio /etc/init.d/haproxy
y configure sus variables allí:
export FE_PORT_8000_TCP_ADDR=172.17.0.4
Respuesta2
Tuve el mismo problema. Se solucionó agregando comillas dobles alrededor de la variable de entorno.
Como se explicaaquí(2.3. Variables ambientales)
La configuración de HAProxy admite variables de entorno.Esas variables se interpretan sólo entre comillas dobles.Las variables se expanden durante el análisis de la configuración. Los nombres de las variables deben ir precedidos por un dólar ("$") y opcionalmente encerrados entre llaves ("{}") de manera similar a lo que se hace en Bourne Shell. Los nombres de las variables pueden contener caracteres alfanuméricos o el carácter de subrayado ("_") pero no deben comenzar con un dígito.
Respuesta3
Respuesta4
Suponiendo que el /etc/init.d/haproxy
archivo contenga los siguientes fragmentos de código:
#!/bin/sh
...
BASENAME=haproxy
...
if [ -e /etc/default/${BASENAME} ]; then
. /etc/default/${BASENAME}
fi
...
, entonces una buena solución para usted será pasar variables adicionales a través del /etc/default/haproxy
archivo.
... como también lo menciona Johan Gov allí:https://serverfault.com/a/841307/608437