Попытка выяснить, почему переменные окружения в 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
Поскольку вы останавливаете / запускаете служебную команду, вам необходимо указать переменные среды в своем сценарии инициализации (например, /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.3. Переменные среды)
Конфигурация HAProxy поддерживает переменные среды. Эти переменные интерпретируются только в двойных кавычках. Переменные раскрываются во время синтаксического анализа конфигурации. Именам переменных должен предшествовать доллар («$») и необязательно заключать в фигурные скобки («{}») аналогично тому, как это делается в оболочке Bourne. Имена переменных могут содержать буквенно-цифровые символы или символ подчеркивания («_»), но не должны начинаться с цифры.
У меня была такая же проблема, но на Debian 8 (Джесси) и установка ее в /etc/init.d/haproxy
не сработало. Я исправил это, установив переменную в /etc/default/haproxy
вот так (нет export
необходимо)
FE_PORT_8000_TCP_ADDR=172.17.0.4
Для получения дополнительной информации см. Мой вопрос и ответ о моей проблеме.