
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/haproxy
no 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/haproxy
e 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
Responder4
Supondo que o /etc/init.d/haproxy
arquivo 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/haproxy
arquivo.
... conforme mencionado por Johan Gov também:https://serverfault.com/a/841307/608437