Die Verwendung von HaProxy-Umgebungsvariablen in haproxy.cfg funktioniert nicht

Die Verwendung von HaProxy-Umgebungsvariablen in haproxy.cfg funktioniert nicht

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/haproxyunter 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/haproxyund 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/haproxyfunktionierte nicht. Ich habe es behoben, indem ich die Variable /etc/default/haproxywie folgt eingestellt habe (nicht exporterforderlich)

FE_PORT_8000_TCP_ADDR=172.17.0.4

Weitere Informationen finden Sie in meinemFrageUndAntwortzu meinem Problem.

Antwort4

Angenommen, die /etc/init.d/haproxyDatei 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/haproxystattdessen über die Datei zu übergeben.

... wie dort auch von Johan Gov erwähnt:https://serverfault.com/a/841307/608437

verwandte Informationen