我在HAPROXY
中定义了一些规则acl want_server_oa path_dir ServerOA
acl serveroa_avail nbsrv(ServerOA) ge 1
use_backend ServerOA if want_server_oa serveroa_avail
acl is_root hdr_dom(host) -i mydomain.com
use_backend domainRoot if is_root
设置前3条规则以将流量路由到某个子域
mydomain.com/ServerOA/
以下两条将流量路由到
的规则mydomain.com/
这可以按预期工作。但是,如果我输入
mydomain.com/anypath/
它给了我一个tomcat 404.我怀疑第二组规则匹配并将流量转发到tomcat,然后返回404.
根据文档,我确实尝试定义了一些用于阻止所有其他路径的acls,这些路径不起作用(启动haproxy时不接受配置)。
block unless METH_GET or METH_POST want_server_oa
block unless METH_GET or METH_POST is_root
非常感谢任何帮助。
答案 0 :(得分:1)
您必须明确定义允许在根“mydomain.com/”和子文件夹下访问的项目,然后block
所有其他项目。 (不应该很多,对吗?)
acl want_server_oa path_beg /ServerOA
acl allow_html path_reg -i /.*\.html
acl allow_styles path_reg -i /css/.*\.css
block unless METH_GET want_server_oa or METH_POST want_server_oa or METH_GET allow_html or METH_POST allow_html or METH_GET allow_styles or METH_POST allow_styles
附加说明:您可以使用haproxy -c
命令检查配置是否有任何错误。像这样:
haproxy -f /etc/haproxy/haproxy.cfg -c