希望有人能指出我正确的方向。
我正在尝试将HAProxy配置为使用环境变量(来自操作系统)作为acl语句的一部分。 因此,如果在启动或重新加载HAProxy时将环境变量设置为true,则授予访问权限。如果环境变量设置为false,那么我只想生成NOSVR错误。
我知道如果我也提出了一条规则 use_backend ftp1-srv除非accessFtp然后请求通过OK,这似乎表明acl部分不起作用。
我在搜索中发现很少以这种方式显示如何使用环境变量只是你应该能够使用env(name)从内部状态进行样本提取
这是我到目前为止所尝试的:
frontend ftp-in
bind *:2200
mode tcp
option tcplog
log /dev/log local1 debug
acl accessFtp env(accessFTP) eq true
use_backend ftp1-srv if accessFtp
backend ftp1-srv
balance source
option tcplog
server ftp1 127.0.0.1:21
答案 0 :(得分:1)
acl accessFtp env(accessFTP) eq true
这可能不起作用,因为eq
是一个整数相等比较运算符,env()
返回一个字符串而true
是......好吧,我不是确定如何键入true
,在与字符串的整数比较中,但无论如何,结果将不是您所期望的。
如果环境变量包含文字字符串true
,则使用显式字符串比较。
acl accessFtp env(accessFTP) -m str true
或者,你应该能够使用"找到一个值"如果您只想测试环境变量是否已设置为任何值,则匹配测试。如果根本没有设置该值,则该值应为false。
acl accessFtp env(accessFTP) -m found
您还可以通过删除已命名的acl并将其替换为匿名来整理您的配置。
use_backend ftp1-srv if accessFtp if { env(accessFTP) -m str true }
答案 1 :(得分:0)
当作为服务运行时,我遇到了与环境变量类似的问题,并通过从/lib/systemd/system/haproxy.service
设置它来解决它。我不确定它对你的情况有帮助。
有关详细信息,请参阅this question或该文件。