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

Tro*_*rks 4 environment-variables haproxy

试图弄清楚为什么 haproxy.cfg 中的环境变量在 HA-Proxy 版本 1.5.2 中不起作用

在命令行上,使用 Printenv 我得到了一个环境变量列表,比如 FE_PORT_8000_TCP_ADDR=172.17.0.4

我需要在 haproxy.cfg 中使用它。根据this和文档 How can I use environment variables in haproxy.conf using $FE_PORT_8000_TCP_ADDR or ${FE_PORT_8000_TCP_ADDR} 应该可以工作。然而,这是行不通的。

在 Haporxy.cfg 硬编码确实有效,并在浏览器中访问它按预期显示:

backend FE
   # balance     roundrobin
    server      FE1 172.17.0.4:8000  maxconn 256
Run Code Online (Sandbox Code Playgroud)

但是具有相同假定值的环境变量没有,在浏览器中它给出 503 Service Unavailable。

backend FE
   # balance     roundrobin
    server      FE1 $FE_PORT_8000_TCP_ADDR:8000  maxconn 256
Run Code Online (Sandbox Code Playgroud)

关于做错了什么的任何想法?

更新:这个人有同样的问题 如何在 haproxy.conf 中使用环境变量

not*_*ter 5

由于您使用 service 命令停止/启动,因此您需要在 init 脚本(例如/etc/init.d/haproxy在 ubuntu 上)中指定环境变量,而不是在您控制服务的交互式终端会话中 ( service haproxy start)。您可以在 proc 文件系统中验证可用于特定 pid 的环境变量。如果您检查您的 haproxy,它可能只是 TERM 和 LANG,因为这是通过服务传递到 init 脚本(服务手册页)的唯一环境。

# cat /proc/$(pgrep haproxy)/environ
Run Code Online (Sandbox Code Playgroud)

如果不是从 init 脚本启动守护进程 haproxy,而是直接运行 haproxy,您可能会看到您正在寻找的行为:

# haproxy -f /etc/haproxy/haproxy.cfg
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请编辑 init 脚本/etc/init.d/haproxy并在其中设置变量:

export FE_PORT_8000_TCP_ADDR=172.17.0.4
Run Code Online (Sandbox Code Playgroud)