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

Как использовать HAProxy с переменными среды при работе в качестве службы

Я новичок в Linux и пытаюсь настроить HAProxy с переменными среды. Я использую Debian 8 (Jessie) и HAProxy 1.5.8, которые я установил с помощью apt-get согласно https://haproxy.debian.net/#?distribution=Debian&release=jessie&version=1.5

Без переменных окружения конфигурация работает отлично.

Я следовал инструкциям из этот ответ (установка переменной среды из /etc/init.d/haproxy), чтобы переменные среды работали, но все равно получил ответ 503 - Служба недоступна.

Я тогда просмотрел /etc/init.d/haproxy и подумал, что эти две строки, возможно, изменили объем доступных переменных

[ -f /etc/default/rcS ] && . /etc/default/rcS
. /lib/lsb/init-functions

поэтому я их закомментировал.

Затем я могу запустить HAProxy, используя sudo /etc/init.d/haproxy startи моя конфигурация работает так, как я ожидал, но когда я пытаюсь запустить sudo service haproxy start Я по-прежнему получаю 503 - Служба недоступна.

Мне кажется как этот вопрос есть ответ, который я ищу, но мне не удалось перевести ответы оттуда на свой домен.

Это часть файла haproxy.cfg, где я использую переменные среды:

backend backend1
    server EnvVar ${SERVER_IP}:86 maxconn 512

Я также просмотрел некоторые другие вопросы здесь, но не нашел решения своей проблемы.

Как мне установить переменную среды, чтобы ее можно было прочитать haproxy, когда haproxy запущен как служба?

Я наконец-то понял.

В /lib/systemd/system/haproxy.service есть такая строка

EnvironmentFile=-/etc/default/haproxy

Я заглянул в /etc/default/haproxy и вот как это выглядит:

# Defaults file for HAProxy
#
# This is sourced by both, the initscript and the systemd unit file, so do not
# treat it as a shell script fragment.

# Change the config file location if needed
#CONFIG="/etc/haproxy/haproxy.cfg"

# Add extra flags here, see haproxy(1) for a few options
#EXTRAOPTS="-de -m 16"

Я добавил туда свою переменную среды и отменил остальные мои изменения, и она работает как при запуске как службы, так и при ее прямом запуске с использованием /etc/init.d/haproxy.

Это строка, которую я добавил:

SERVER_IP=165.88.76.44

Этот ответ правильный и правильно работает на haproxy 1.7 - 1.8

Вот простой скрипт для улучшения использования нескольких файлов haproxy:

cd /etc/sysconfig

for i in haproxy_*; do 
   echo $i; 
   echo "MY_SERVER=$(hostname -i)" >> $i   
done

Теперь в настройках Haproxy:

...
backend lochttps

   server server_name ${MY_SERVER}:60441 check ssl verify none id 1
...