O uso de variáveis ​​ambientais HaProxy em haproxy.cfg não funciona

O uso de variáveis ​​ambientais HaProxy em haproxy.cfg não funciona

Tentando descobrir por que as variáveis ​​ambientais em haproxy.cfg não estão funcionando no HA-Proxy versão 1.5.2

na linha de comando, usando Printenv recebo uma lista de variáveis ​​ambientais como FE_PORT_8000_TCP_ADDR=172.17.0.4

Que preciso usar no haproxy.cfg. De acordo com isto e os documentos Como posso usar variáveis ​​de ambiente em haproxy.conf usar $FE_PORT_8000_TCP_ADDR ou ${FE_PORT_8000_TCP_ADDR} deve funcionar. No entanto, isso não está funcionando.

No Haporxy.cfg a codificação FUNCIONA e, acessada em um navegador, é exibida conforme o esperado:

backend FE
   # balance     roundrobin
    server      FE1 172.17.0.4:8000  maxconn 256

Mas a variável ambiental com o mesmo suposto valor não, no navegador dá 503 Serviço Indisponível.

backend FE
   # balance     roundrobin
    server      FE1 $FE_PORT_8000_TCP_ADDR:8000  maxconn 256

Alguma idéia sobre o que está sendo feito de errado?

ATUALIZAÇÃO: esta pessoa tem o que parece ser o mesmo problema Como posso usar variáveis ​​de ambiente em haproxy.conf

Responder1

Como você está parando/iniciando com o comando de serviço, você precisa especificar as variáveis ​​de ambiente em seu script de inicialização (por exemplo, /etc/init.d/haproxyno Ubuntu) e não em sua sessão de terminal interativo onde você está controlando o serviço ( service haproxy start). Você pode verificar as variáveis ​​de ambiente disponíveis para um pid específico no sistema de arquivos proc. Se você verificar se há haproxy no seu, provavelmente será apenas TERM e LANG, porque esse é o único ambiente que é passado via serviço para o script de inicialização (página de manual para serviço).

# cat /proc/$(pgrep haproxy)/environ

Se, em vez de iniciar o haproxy daemonizado a partir do script de inicialização, você executar diretamente o haproxy, provavelmente verá o comportamento que está procurando:

# haproxy -f /etc/haproxy/haproxy.cfg

Para resolver isso, edite o script init /etc/init.d/haproxye defina suas variáveis ​​lá:

export FE_PORT_8000_TCP_ADDR=172.17.0.4

Responder2

Tive o mesmo problema. Corrigido adicionando aspas duplas ao redor da variável de ambiente.

Como explicadoaqui(2.3. Variáveis ​​ambientais)

A configuração do HAProxy suporta variáveis ​​de ambiente.Essas variáveis ​​são interpretadas apenas entre aspas duplas.As variáveis ​​são expandidas durante a análise da configuração. Os nomes das variáveis ​​​​devem ser precedidos por um cifrão ("$") e opcionalmente entre colchetes ("{}"), semelhante ao que é feito no shell Bourne. Os nomes das variáveis ​​podem conter caracteres alfanuméricos ou sublinhado ("_"), mas não devem começar com um dígito.

Responder3

Eu tive o mesmo problema, mas no Debian 8 (Jessie) e configurá-lo /etc/init.d/haproxynão funcionou. Eu consertei definindo a variável /etc/default/haproxyassim (não é exportnecessário)

FE_PORT_8000_TCP_ADDR=172.17.0.4

Para mais informações veja meuperguntaerespondersobre o meu problema.

Responder4

Supondo que o /etc/init.d/haproxyarquivo contenha os seguintes fragmentos de código:

#!/bin/sh
...

BASENAME=haproxy
...

if [ -e /etc/default/${BASENAME} ]; then
    . /etc/default/${BASENAME}
fi
...

, então uma boa solução para você será passar variáveis ​​adicionais através do /etc/default/haproxyarquivo.

... conforme mencionado por Johan Gov também:https://serverfault.com/a/841307/608437

informação relacionada