作为服务运行时如何使用 HAProxy 和环境变量

作为服务运行时如何使用 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 可以读取它?

答案1

我终于弄明白了。

其中/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

答案2

这个答案是正确的,并且可以在 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
...

相关内容