Использование переменных окружения HaProxy в haproxy.cfg не работает

Использование переменных окружения HaProxy в haproxy.cfg не работает

Пытаюсь выяснить, почему переменные окружения в haproxy.cfg не работают в HA-Proxy версии 1.5.2

в командной строке с помощью Printenv я получаю список переменных окружения типа FE_PORT_8000_TCP_ADDR=172.17.0.4

Который мне нужно использовать в haproxy.cfg. Согласно этому и документации Как использовать переменные окружения в haproxy.conf Использование $FE_PORT_8000_TCP_ADDR или ${FE_PORT_8000_TCP_ADDR} должно работать. Однако это не работает.

В Haporxy.cfg жесткое кодирование РАБОТАЕТ, и при доступе в браузере оно отображается так, как и ожидалось:

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

Но переменная окружения с тем же предполагаемым значением не работает, в браузере выдается ошибка 503 Service Unavailable.

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

Есть идеи, что делается неправильно?

ОБНОВЛЕНИЕ: У этого человека, похоже, та же проблема Как использовать переменные окружения в haproxy.conf

решение1

Поскольку вы останавливаете/запускаете с помощью команды service, вам необходимо указать переменные среды в вашем скрипте инициализации (например, /etc/init.d/haproxyв Ubuntu), а не в интерактивной терминальной сессии, где вы управляете службой ( service haproxy start). Вы можете проверить переменные среды, доступные для определенного pid в файловой системе proc. Если вы проверите свой на haproxy, то, скорее всего, там будут только TERM и LANG, поскольку это единственная среда, которая передается через службу в скрипт инициализации (страница руководства для сервиса).

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

Если вместо запуска демонизированного haproxy из сценария инициализации вы напрямую запустите haproxy, вы, скорее всего, увидите искомое поведение:

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

Чтобы решить эту проблему, отредактируйте скрипт инициализации /etc/init.d/haproxyи задайте там свои переменные:

export FE_PORT_8000_TCP_ADDR=172.17.0.4

решение2

Была та же проблема. Исправил ее, добавив двойные кавычки вокруг переменной окружения.

Как было объясненоздесь(2.3. Переменные среды)

Конфигурация HAProxy поддерживает переменные среды.Эти переменные интерпретируются только внутри двойных кавычек.Переменные раскрываются во время анализа конфигурации. Имена переменных должны начинаться с доллара ("$") и опционально заключаться в фигурные скобки ("{}"), как это делается в оболочке Bourne. Имена переменных могут содержать буквенно-цифровые символы или символ подчеркивания ("_"), но не должны начинаться с цифры.

решение3

У меня была та же проблема, но на Debian 8 (Jessie), и установка /etc/init.d/haproxyне сработала. Я исправил это, установив переменную /etc/default/haproxyвот так (не exportнужно)

FE_PORT_8000_TCP_ADDR=172.17.0.4

Для получения дополнительной информации см. мойвопросиотвечатьпо поводу моей проблемы.

решение4

Предположим, что /etc/init.d/haproxyфайл содержит следующие фрагменты кода:

#!/bin/sh
...

BASENAME=haproxy
...

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

, то хорошим решением для вас будет передача дополнительных переменных через /etc/default/haproxyфайл.

... как также упомянул Йохан Гов:https://serverfault.com/a/841307/608437

Связанный контент