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

Nginx配置拦截UA为"-" "-"的DDoS请求时重启报错如何解决?

错误原因

你遇到的启动报错+拦截不生效问题来自两个核心错误:

  • 日志字段认知错误:Nginx默认combined日志格式的字段顺序为客户端IP - 远程用户 [请求时间] "请求行" 状态码 响应字节数 "Referer来源" "User-Agent用户代理",你看到的日志末尾"-" "-",前一个"-"代表Referer为空,后一个"-"才代表UA为空,UA字段本身的值就是单个-,不是"-" "-"。
  • 配置语法错误:你写的$http_user_agent ~ ("-" "-")不符合Nginx的正则写法规则,多余的括号、空格和双引号嵌套会直接导致配置解析失败,服务无法启动。
正确拦截规则

这类攻击的核心特征是UA值为-(即客户端未携带正常UA头),优先用性能更高的精确匹配规则,把以下配置放到需要防护的server块或者全局http块中即可:

# 拦截UA为单个"-"的恶意请求
if ($http_user_agent = "-") {
    return 403;
}

如果担心误杀正常请求(几乎不存在正常客户端UA为-的情况),可以结合你日志里的攻击特征(HEAD请求方法、空Referer)写更精准的匹配规则,误杀率接近0:

# 同时匹配HEAD请求、空UA、空Referer,精准命中你遇到的攻击流量
if ($request_method = HEAD) {
    if ($http_referer = "-") {
        if ($http_user_agent = "-") {
            return 403;
        }
    }
}
配置生效操作

修改配置后不要直接重启服务,先执行语法校验避免启动失败:

nginx -t

当终端输出syntax is ok、test is successful的提示后,执行重载命令让配置生效即可,不会中断现有业务:

nginx -s reload
补充防护建议

这类多IP的DDoS攻击如果流量规模较大,单靠Nginx拦截会消耗服务器自身带宽和CPU资源,建议搭配以下措施提升防护效果:

  • 在云服务商安全组、WAF层面配置频率限制,单IP短时间内请求频率超过阈值直接在边缘节点拉黑,不用回源到服务器。
  • Nginx层面可添加限流规则兜底,参考配置如下:
# 先在http块定义限流区域,分配10M内存存储客户端IP,限制单IP平均每秒10个请求
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

# 在对应server块引用限流规则,突发请求最多允许5个,超出直接返回503
limit_req zone=req_limit burst=5 nodelay;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:06:42