nginx可通过四步低成本阻断暴力url猜测:一、禁止访问敏感路径与文件(如.git、.zip、phpinfo.php)并返回404/444;二、拦截扫描器ua及非法referer;三、基于ip+uri限流防高频路径探测;四、隐藏server指纹并禁用目录列表。

暴力猜测 URL(比如扫描 /admin, /backup.zip, /phpinfo.php, /.git/config 等)是一种常见探测行为,攻击者不直接爆破密码,而是试图发现暴露的敏感路径、备份文件、调试接口或配置目录,为后续入侵铺路。Nginx 本身不带 WAF 功能,但通过合理配置,能低成本、高实效地阻断这类探测。
核心思路不是“识别攻击”,而是“封堵入口 + 消除线索 + 增加成本” —— 让扫描器找不到有效响应,或得到误导/错误反馈,从而放弃继续探测。
一、禁止访问敏感路径和文件类型
这是最直接有效的第一道防线。攻击者常批量请求特定后缀或路径,Nginx 可在匹配时立即拒绝。
# 禁止访问常见敏感文件(返回 404 或 444)
location ~* \.(bak|conf|sql|log|env|ini|yml|yaml|git|svn|htaccess|htpasswd)$ {
return 404;
}
# 禁止访问隐藏目录(如 .git、.svn、.dockerignore)
location ~ /\. {
deny all;
return 404;
}
# 禁止访问常见探测路径(可按需扩展)
location ~ ^/(phpinfo|test|debug|install|wp-config\.php|config\.php|backup\.zip|wwwroot\.zip) {
return 404;
}
✅ 关键点:用
return 404(而非deny all)更稳妥——避免暴露 Nginx 的内部拒绝逻辑;若想彻底静默,可用return 444(关闭连接,无响应)。
二、限制非预期 Referer 和 User-Agent 的请求
大量自动化扫描工具会使用固定 UA(如 sqlmap, nikto, wget, curl -I),或空 Referer 直接请求敏感资源。可结合 if 判断拦截:
# 拦截已知扫描器 UA(注意:慎用于全站,建议只用于静态资源或敏感路径)
if ($http_user_agent ~* "(sqlmap|nikto|dirb|gobuster|wfuzz|nmap|masscan|acunetix|nessus)") {
return 403;
}
# 对静态资源(如 JS/CSS/图片)要求合法来源,防爬虫式遍历
location ~* \.(js|css|png|jpg|gif|ico|svg|woff2?)$ {
valid_referers none blocked server_names *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
⚠️ 注意:
if在 location 中慎用,优先放在server块顶层或配合map指令提升性能;UA 黑名单需定期更新,不宜过度依赖。
三、对高频路径探测行为做请求限流
单纯封文件不够——攻击者可能尝试成百上千个不同路径(如 /a.php, /b.php, /c.php…)。此时需从“频率维度”压制:
# 定义一个专用于路径探测防护的限流区(按 IP + URI 哈希)
limit_req_zone $binary_remote_addr$uri zone=path_scan:10m rate=2r/s;
server {
location / {
# 对根路径及子路径启用探测限流(每秒最多 2 次不同 URI 请求)
limit_req zone=path_scan burst=5 nodelay;
# …其余配置
}
}
? 说明:
$uri是标准化后的路径(不含参数),配合$binary_remote_addr可识别同一 IP 短时间内频繁请求不同路径的行为。burst=5 允许短暂突发,避免误伤正常用户点击导航;nodelay确保超限请求立刻拒绝,不排队堆积。
四、隐藏服务器指纹,减少被定向扫描概率
攻击者常先判断你用的是 Nginx 还是 Apache,版本多少,再调用对应漏洞 PoC。去掉这些“路标”,能大幅降低被精准打击风险:
# 在 http 块中统一设置 server_tokens off; # 隐藏 Nginx 版本号 more_clear_headers "Server"; # 移除 Server 头(需 headers-more 模块) add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "DENY"; add_header X-XSS-Protection "1; mode=block";
同时禁用目录列表,防止扫描器通过 /images/ 自动发现更多路径:
location / {
autoindex off; # 关键!默认就是 off,但显式声明更安心
}
防御暴力猜测 URL 不靠“智能识别”,而靠“收敛暴露面 + 提高探测成本 + 快速切断异常行为”。上述四步组合起来,不需要额外组件,即可让多数自动化扫描器在几秒内失去目标或触发限流,真正把攻击挡在门外。











