2016-07-13 7 views
1

Надеясь, что кто-то может указать мне в правильном направлении.использование переменных среды в haproxy

Я пытаюсь настроить HAProxy для использования переменной окружения (из операционной системы) как часть инструкции acl. Итак, если для переменной окружения установлено значение true, когда HAProxy запущен или перезагружен, предоставляется доступ. Если для переменной окружения установлено значение false, я просто хочу, чтобы ошибка NOSVR была сгенерирована.

Я знаю, что если я также добавлю правило, которое говорит use_backend ftp1-srv, если accessFtp не будет запрошен, то это будет означать, что секция acl не работает.

Я нашел очень мало в моих поисках, которые показывают, как использовать переменные окружения, таким образом, просто, что вы должны быть в состоянии сделать выборку выборка из внутреннего состояния с окр (имя)

Это то, что я пытались до сих пор:

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
acl accessFtp env(accessFTP) eq true 

Это, вероятно, не работает, потому что eq оператор сравнения равенства целое, env() возвращает строку и true это ... хорошо, я не знаю, как true будет вводиться в виде целочисленного сравнения со строкой, но в любом случае результат будет не таким, как вы ожидаете.

Используйте явное сравнение строк, если переменная окружения содержит литерала string true.

acl accessFtp env(accessFTP) -m str true 

Или, вы должны быть в состоянии использовать тест «значение было найдено» матч, если вы хотите проверить, что переменная окружения была установлена ​​ни к чему. Это значение должно быть ложным, если значение не установлено вообще.

acl accessFtp env(accessFTP) -m found 

Вы можете также привести в порядок свой конфиг, удалив с именем ACL и заменить его анонимным один.

use_backend ftp1-srv if accessFtp if { env(accessFTP) -m str true } 
0

У меня была аналогичная проблема с переменными окружения при работе в качестве службы и решить ее, установив их /lib/systemd/system/haproxy.service. Я не уверен, поможет ли это в вашем случае.

Подробнее см. В this question или в этом файле.