网站遭恶意请求攻击,如何在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
相关产品推荐
相关产品推荐

