You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用HAProxy拦截不含指定关键词的URL请求

HAProxy 配置修复:拦截指定查询参数不符合要求的请求

问题根源

你之前的配置用了path_reg,但HAProxy的path_reg仅匹配URL的路径部分(即?之前的内容),查询参数不在这个匹配范围内,所以你的正则规则根本不会触发,导致所有请求都被允许通过。

正确配置方案

要匹配查询参数的值,需要使用HAProxy专门处理查询参数的指令:urlp_reg(基于正则匹配查询参数值)或者结合urlp与字符串判断。

方案一:使用urlp_reg(推荐,支持不区分大小写)

直接匹配urls.primaryName参数的值,若不包含(不区分大小写)Developer则拒绝请求:

frontend http-in
    acl url_petstore_v2 path_beg -i /swaggerui/PetStore/
    use_backend petstore_v2 if url_petstore_v2

backend petstore_v2
    # 匹配urls.primaryName的值不包含Developer(不区分大小写)的请求,拒绝
    http-request deny if { urlp_reg urls.primaryName -i ^(?!.*Developer).*$ }
    server petstore1 $PS_HOST$SERVER_ADDRESS_TAIL:$PS_PORT check $TLS_APPEND $HAPROXY_RESOLVER_EXPR

方案二:使用urlp结合! sub

通过字符串包含判断,若urls.primaryName的值不包含Developer(不区分大小写)则拒绝:

frontend http-in
    acl url_petstore_v2 path_beg -i /swaggerui/PetStore/
    use_backend petstore_v2 if url_petstore_v2

backend petstore_v2
    # 定义ACL:urls.primaryName的值不包含Developer(不区分大小写)
    acl primary_name_no_developer urlp(urls.primaryName) -i ! sub Developer
    # 拒绝符合上述ACL的请求
    http-request deny if primary_name_no_developer
    server petstore1 $PS_HOST$SERVER_ADDRESS_TAIL:$PS_PORT check $TLS_APPEND $HAPROXY_RESOLVER_EXPR

额外说明

  • 若需要同时拦截没有urls.primaryName参数的请求,可以在拒绝条件中添加! urlp_exists urls.primaryName,比如:
    http-request deny if { ! urlp_exists urls.primaryName } or { urlp_reg urls.primaryName -i ^(?!.*Developer).*$ }
    
  • 测试时可以用curl验证:
    • 允许的请求:curl "http://your-domain/swaggerui/PetStore/index.html?urls.primaryName=V1-Developer"
    • 被拦截的请求:curl "http://your-domain/swaggerui/PetStore/index.html?urls.primaryName=V1-Private"

内容的提问来源于stack exchange,提问作者Nithin B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:19