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

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

4
задан 13 April 2017 в 15:14
4 ответа

Так как вы останавливаете/запускаете с помощью команды 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
3
ответ дан 3 December 2019 в 03:29

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

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

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

1
ответ дан 3 December 2019 в 03:29

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

FE_PORT_8000_TCP_ADDR=172.17.0.4

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

0
ответ дан 3 December 2019 в 03:29

Если предположить, что файл /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

0
ответ дан 30 January 2021 в 21:59

Теги

Похожие вопросы