如何在Nginx配置中拦截含指定内容的uri参数请求?
Nginx拦截含特定域名的uri参数请求配置方案
完整修改后的配置
location / { # 拦截uri参数中包含example.com的请求,直接返回403封禁 if ($args ~* "uri=.+example\.com") { return 403; } # 原有根据uri参数转发的逻辑 if ($args ~ "^uri=(.+)") { set $key1 $1; proxy_pass $key1; } }
关键说明
- 匹配规则:用
~*实现不区分大小写的正则匹配,避免攻击者通过Example.com这类大小写变种绕过封禁;正则里的.要转义为\.,否则会匹配任意字符。 - 执行顺序:把拦截判断放在转发逻辑之前,确保符合封禁条件的请求直接被拦截,不会进入转发流程。
- 响应选择:返回
403 Forbidden是标准的封禁响应,也可根据需求改为444(直接关闭连接,无响应内容)或其他状态码。
多域名封禁扩展
如果需要同时拦截多个域名,可扩展正则规则:
if ($args ~* "uri=.+(example\.com|test\.org|bad\.net)") { return 403; }
内容的提问来源于stack exchange,提问作者omega1
相关产品推荐
相关产品推荐

