在haproxy中使用环境变量

时间:2016-07-13 17:15:11

标签: variables acl environment haproxy

希望有人能指出我正确的方向。

我正在尝试将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

2 个答案:

答案 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或该文件。