El uso de variables ambientales de HaProxy en haproxy.cfg no funciona

El uso de variables ambientales de HaProxy en haproxy.cfg no funciona

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/haproxyen 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/haproxyy 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

Tuve el mismo problema pero en Debian 8 (Jessie) y configurarlo /etc/init.d/haproxyno funcionó. Lo arreglé configurando la variable /etc/default/haproxyasí (no es exportnecesario)

FE_PORT_8000_TCP_ADDR=172.17.0.4

Para más información vea mipreguntayrespuestasobre mi problema.

Respuesta4

Suponiendo que el /etc/init.d/haproxyarchivo 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/haproxyarchivo.

... como también lo menciona Johan Gov allí:https://serverfault.com/a/841307/608437

información relacionada