我是 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
...