在haproxy.cfg中使用HaProxy环境variables不起作用

试图弄清为什么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 

欲了解更多信息,请参阅我的问题和答案 。