
Ich versuche herauszufinden, warum Umgebungsvariablen in haproxy.cfg in HA-Proxy Version 1.5.2 nicht funktionieren
Auf der Kommandozeile erhalte ich mit Printenv eine Liste von Umgebungsvariablen wie FE_PORT_8000_TCP_ADDR=172.17.0.4
Was ich in der haproxy.cfg verwenden muss. Laut diesem und den Dokumenten Wie kann ich Umgebungsvariablen in haproxy.conf verwenden? Die Verwendung von $FE_PORT_8000_TCP_ADDR oder ${FE_PORT_8000_TCP_ADDR} sollte funktionieren. Das funktioniert jedoch nicht.
In Haporxy.cfg funktioniert die Hardcodierung und beim Zugriff über einen Browser wird es wie erwartet angezeigt:
backend FE
# balance roundrobin
server FE1 172.17.0.4:8000 maxconn 256
Bei einer Umgebungsvariablen mit demselben angenommenen Wert ist dies jedoch nicht der Fall; im Browser wird die Meldung „503 Service Unavailable“ ausgegeben.
backend FE
# balance roundrobin
server FE1 $FE_PORT_8000_TCP_ADDR:8000 maxconn 256
Irgendwelche Ideen, was falsch gemacht wird?
UPDATE: Diese Person hat anscheinend das gleiche Problem Wie kann ich Umgebungsvariablen in haproxy.conf verwenden?
Antwort1
Da Sie mit dem Service-Befehl stoppen/starten, müssen Sie die Umgebungsvariablen in Ihrem Init-Skript angeben (z. B. /etc/init.d/haproxy
unter Ubuntu) und nicht in Ihrer interaktiven Terminalsitzung, in der Sie den Dienst steuern ( service haproxy start
). Sie können die für eine bestimmte PID verfügbaren Umgebungsvariablen im Proc-Dateisystem überprüfen. Wenn Sie Ihr haproxy überprüfen, werden es wahrscheinlich nur TERM und LANG sein, da dies die einzige Umgebung ist, die über den Dienst an das Init-Skript übergeben wird (Manpage für den Dienst).
# cat /proc/$(pgrep haproxy)/environ
Wenn Sie haproxy nicht über das Init-Skript starten, sondern es direkt ausführen, wird wahrscheinlich das gewünschte Verhalten angezeigt:
# haproxy -f /etc/haproxy/haproxy.cfg
Um dies zu lösen, bearbeiten Sie das Init-Skript /etc/init.d/haproxy
und legen Sie dort Ihre Variablen fest:
export FE_PORT_8000_TCP_ADDR=172.17.0.4
Antwort2
Hatte das gleiche Problem. Habe es behoben, indem ich die Umgebungsvariable mit Anführungszeichen umgab.
Wie erklärtHier(2.3. Umgebungsvariablen)
Die Konfiguration von HAProxy unterstützt Umgebungsvariablen.Diese Variablen werden nur in Anführungszeichen interpretiert.Variablen werden während der Konfigurationsanalyse erweitert. Variablennamen müssen mit einem Dollarzeichen („$“) beginnen und optional in Klammern („{}“) eingeschlossen werden, ähnlich wie in der Bourne-Shell. Variablennamen können alphanumerische Zeichen oder den Unterstrich („_“) enthalten, sollten aber nicht mit einer Ziffer beginnen.
Antwort3
Ich hatte das gleiche Problem, aber unter Debian 8 (Jessie) und das Einrichten /etc/init.d/haproxy
funktionierte nicht. Ich habe es behoben, indem ich die Variable /etc/default/haproxy
wie folgt eingestellt habe (nicht export
erforderlich)
FE_PORT_8000_TCP_ADDR=172.17.0.4
Weitere Informationen finden Sie in meinemFrageUndAntwortzu meinem Problem.
Antwort4
Angenommen, die /etc/init.d/haproxy
Datei enthält die folgenden Codefragmente:
#!/bin/sh
...
BASENAME=haproxy
...
if [ -e /etc/default/${BASENAME} ]; then
. /etc/default/${BASENAME}
fi
...
, dann ist es für Sie eine gute Lösung, zusätzliche Variablen /etc/default/haproxy
stattdessen über die Datei zu übergeben.
... wie dort auch von Johan Gov erwähnt:https://serverfault.com/a/841307/608437