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

网站遭恶意请求攻击,如何在NGINX中阻止以问号开头的请求?

快速解决:在NGINX中阻止伪造Googlebot的/?xxx恶意请求

看你贴的日志,这些都是伪装成Googlebot的恶意请求,专门通过根路径加随机查询参数的方式(比如/?bailiffry/1529595)来访问,要快速搞定这个问题,给你几个实用的NGINX配置方案:


方案1:精准拦截所有/?开头的请求

如果你的网站根路径/本来就不需要接收任何查询参数,直接用这个配置就能一刀切拦截:

在你的NGINX server块里添加这段规则:

if ($request_uri ~* "^/\?") {
    return 444; # 直接关闭连接,比403更高效
}

说明:

  • $request_uri是客户端发送的完整请求URI(包含查询参数)
  • 正则^/\?专门匹配以/?开头的请求(?在正则里是特殊字符,所以加了转义符\)
  • return 444会直接断开连接,不给恶意请求返回任何响应,能节省服务器资源

方案2:结合User-Agent双重拦截(针对伪造Googlebot)

因为这些请求都伪装成Googlebot,你可以再加一层验证,避免误拦真实的Googlebot(如果你的网站确实需要被Google爬取的话):

if ($request_uri ~* "^/\?") {
    # 检查User-Agent是否包含Googlebot标识
    if ($http_user_agent ~* "Googlebot") {
        return 403; # 或者用return 444直接关闭连接
    }
}

如果想更严谨,后续可以验证请求IP是否来自谷歌官方IP段,但这个方案已经能快速解决当前的攻击问题。


方案3:仅拦截根路径带查询参数的请求

如果你的根路径/偶尔需要接收合法的查询参数,只是要拦截这类随机参数的恶意请求,可以用这个:

location = / {
    # 当存在查询参数时拒绝访问
    if ($args) {
        return 403;
    }
    # 下面放你根路径的正常处理逻辑,比如proxy_pass或者root等
}

最后一步:

配置修改完成后,执行这个命令重新加载NGINX使配置生效:

sudo nginx -s reload

内容的提问来源于stack exchange,提问作者jonathan tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:50:23