如果变量的评估返回 true,我希望 haproxy 返回 30x 状态代码。我看到您可以在 haproxy 中构建条件,并评估 cookie 之类的东西:
use_backend i if !cookie_set
但在我的例子中,这个条件评估的变量来 self 环境中的源。我可以在 haproxy 访问它所需的任何方法中公开此变量,并且可以是一个简单的 bool 值(因此“如果 x 为真,则返回 302”)。有没有办法配置 haproxy 来支持这个?
最佳答案
我找到了解决这个问题的方法。有conditionals for ACLs称为“always_true”和“always_false”,顾名思义,这将导致使用它们的 ACL 始终返回 true 或分别返回 false。所以我在我的配置中这样设置:
acl do_redir always_true
然后我稍后在我的配置中使用这个 ACL 构造一个重定向 stmt:
redirect code 307 prefix http://someurl if do_redir
ACL do_redir
是我切换 haproxy 重定向行为的机制。我正在 haproxy 配置中更改它并使用 chef 重新启动进程,所以这一切都发生得非常快。
修改此 ACL 的另一种方法是使用 haproxy 套接字,我还没有开始工作。这似乎比我当前的方法有优势,因为它不需要重新启动和可能丢失的连接,也不需要修改 haproxy 配置文件的复杂性和增加的风险。
关于conditional-statements - 基于动态变量的 Haproxy 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495007/