试图弄清为什么haproxy.cfg中的环境variables在HA-Proxy版本1.5.2中不起作用
在命令行上,使用Printenv我得到一个环境variables列表,如FE_PORT_8000_TCP_ADDR = 172.17.0.4
我需要在haproxy.cfg中使用。 根据这个和文档我应该如何使用$ FE_PORT_8000_TCP_ADDR或$ {FE_PORT_8000_TCP_ADDR} 在haproxy.conf中使用环境variables 。 但是,这是行不通的。
在Haporxy.cfg硬编码工作,并在浏览器中访问它显示如预期:
backend FE # balance roundrobin server FE1 172.17.0.4:8000 maxconn 256
但是同一个假设值的环境variables不会在浏览器中给出503 Service Unavailable。
backend FE # balance roundrobin server FE1 $FE_PORT_8000_TCP_ADDR:8000 maxconn 256
任何想法是什么做错了?
更新:这个人有什么看起来像相同的问题如何在haproxy.conf中使用环境variables
由于您停止/开始使用服务命令,您需要在您的init脚本中指定环境variables(例如,ubuntu上的/etc/init.d/haproxy
),而不是在您控制服务的交互式terminal会话中service haproxy start
)。 您可以validationproc文件系统中特定pid可用的环境variables。 如果你检查你的haproxy,它可能只是TERM和LANG,因为这是通过服务传递给init脚本( 服务联机帮助 )的唯一环境。
# cat /proc/$(pgrep haproxy)/environ
如果不是从初始化脚本启动守护程序haproxy,而是直接运行haproxy,则可能会看到您正在寻找的行为:
# haproxy -f /etc/haproxy/haproxy.cfg
为了解决这个问题,编辑init脚本/etc/init.d/haproxy
并在那里设置你的variables:
export FE_PORT_8000_TCP_ADDR=172.17.0.4
有同样的问题。 通过在环境variables周围添加双引号来修复它。
如此处所述(2.3。环境variables)
HAProxy的configuration支持环境variables。 这些variables只能在双引号内解释。 variables在configurationparsing期间被扩展。 variables名称必须以美元(“$”)作为前缀,并且可以使用大括号(“{}”),类似于Bourne shell中所做的。 variables名称可以包含字母数字字符或字符下划线(“_”),但不能以数字开头。
我有同样的问题,但在Debian 8(杰西),并将其设置在/etc/init.d/haproxy
没有工作。 我通过在/etc/default/haproxy
设置variables来/etc/default/haproxy
这个问题(不需要export
)
FE_PORT_8000_TCP_ADDR=172.17.0.4
欲了解更多信息,请参阅我的问题和答案 。