Назад | Перейти на главную страницу

Использование переменных окружения 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

Поскольку вы останавливаете / запускаете служебную команду, вам необходимо указать переменные среды в своем сценарии инициализации (например, /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

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