使用在Ubuntu 12.04上运行的Haproxy 1.5.12
我需要限制访问我的网站要求来自某些IP或在请求中有一个定义的参数。
因此,例如,以下请求应该只能从授权的IP工作:
http://www-test.example.com/page.php
这个请求应该从任何知识产权(包括允许的知识产权)中完成:
http://www-test.example.com/page.php?devtool=1
我的ACL是:
acl is_test hdr(host) -m sub test acl is_allowed src -f /etc/haproxy/allowed_ips acl is_devtool urlp(devtool) 1 acl is_devtool hdr_sub(Referer) devtool=1
并且如果专门使用,它们工作得很好
http-request deny if is_test ! is_allowed
要么
http-request deny if is_test ! is_devtool
但是,如果我把它们与一个或者我无法从一个允许的IP访问URL(反转testing没有帮助):
http-request deny if is_test ! is_allowed || is_test ! is_devtool
任何想法如何做到这一点?
谢谢
你似乎想要施加的testing是这样的:
A && !(B || C)
…但这不是在逻辑上等同于你所写的,这本质上是…
(A && !B) || (A && !C)
A && !(B || C)的逻辑等价不用优先级括号实际上是这样的:
A && !B && !C
所以你要找的应该是这样的:
http-request deny if is_test !is_allowed !is_devtool
或者,重申一下:否认请求,如果 –
is_test 和 is_allowed 和 is_devtool不匹配 只要这些条件中的任何一个是假的(不是testing,是允许的,是devtool),你的规则不匹配,并且不否认这个请求。