
Пытаюсь выяснить, почему переменные окружения в 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
решение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