HAProxy配置问题:仅允许单个URL访问却无法拦截其他文件
HAProxy配置错误分析及修正方案
现有配置的核心问题
ACL逻辑错误
你定义的两个同名ACLbackend_acl_agendamento在HAProxy中是逻辑或的关系——只要请求路径满足「以/Qweb/common开头」或者「以UserSchedule.aspx结尾」,就会匹配并转发到后端。这就导致像/Qweb/common/Login.aspx这类符合路径前缀但不是目标文件的请求也能被放行,完全违背了「仅允许指定URL」的需求。缺少默认拦截规则
现有配置只定义了匹配成功时的后端转发规则,但没有对不匹配的请求做拦截处理。如果HAProxy存在默认后端,未匹配的请求会被转发到默认后端;即使没有默认后端,HAProxy也可能返回默认响应而非拦截,导致其他URL仍可访问。
修正后的配置示例
frontend agendamento_frontend # 用不同名称的ACL,通过逻辑与(AND)组合,精确匹配目标URL acl path_prefix path_beg -i /Qweb/Common acl path_suffix path_end -i UserSchedule.aspx # 仅同时满足前缀和后缀的请求,才转发到后端 use_backend agendamento_backend if path_prefix AND path_suffix # 所有不匹配的请求直接拒绝 http-request deny
额外说明
- 路径大小写:原需求中的路径是
/Qweb/Common(大写C),你的ACL用了/Qweb/common(小写c),虽然加了-i忽略大小写,但统一大小写能让配置更严谨。 - 自定义拦截响应:可以给
http-request deny添加参数,比如http-request deny deny_status 403,返回403错误码明确告知用户无访问权限。
内容的提问来源于stack exchange,提问作者Antônio Godinho
相关产品推荐
相关产品推荐

