Попытка выяснить, почему переменные окружения в haproxy.cfg не работают в версии 1.5.2 Прокси HA
на командной строке с помощью 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 Недоступным Сервисам.
backend FE
# balance roundrobin
server FE1 $FE_PORT_8000_TCP_ADDR:8000 maxconn 256
Какие-либо идеи о том, что делается неправильно?
ОБНОВЛЕНИЕ: Этот человек имеет то, что похоже на ту же проблему, Как может я использовать переменные среды в haproxy.conf
Так как вы останавливаете/запускаете с помощью команды service, вам необходимо указать переменные окружения в вашем init скрипте (например, /etc/init.d/haproxy
на ubuntu), а не в интерактивном терминальном сеансе, где вы управляете сервисом (service haproxy start
). Вы можете проверить переменные окружения, доступные для конкретного pid в файле proc. Если вы проверите ваш скрипт на haproxy, то скорее всего это будут только TERM и LANG, потому что это единственное окружение, которое передаётся через сервис в init скрипт (manpage for service).
# cat /proc/$(pgrep haproxy)/environ
Если вместо запуска демонизированного haproxy из init скрипта вы напрямую запустите haproxy, то вы, скорее всего, увидите поведение, которое вы ищете:
# haproxy -f /etc/haproxy/haproxy.cfg
Чтобы решить эту проблему, отредактируйте init скрипт /etc/init. d/haproxy
и установите там свои переменные:
export FE_PORT_8000_TCP_ADDR=172.17.0.4
У меня была та же проблема. Исправлено добавлением двойных кавычек вокруг переменной окружения.
Как объяснялось здесь (2.3. Переменные окружения)
Конфигурация HAProxy поддерживает переменные окружения. Те Переменные интерпретируются только в двойных кавычках. Переменные имеют вид расширенный во время разбора конфигурации. Имена переменных должны быть перед которым стоит доллар ("$") и который по желанию может быть заключен в фигурные скобки ("{}"). подобно тому, что делают в панцире Борна. Имена переменных могут содержать буквенно-цифровые символы или символ подчеркивания ("_"), но они должны не начинать с цифры.
У меня была та же проблема, но на Debian 8 ( Jessie) и установка его в /etc/init.d/haproxy
не сработала. Я исправил это, установив переменную в / etc / default / haproxy
следующим образом (экспорт не требуется
)
FE_PORT_8000_TCP_ADDR=172.17.0.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