恶意大文件攻击需通过“大请求体+异常行为+后果痕迹”三重线索排查:用awk筛查access.log中超10MB请求、高频上传路径及非标方法大body;关联error.log中“No space left”“client intended to send too large body”等关键词;验证client_body_temp目录磁盘使用率并清理;最后设client_max_body_size限值、限速及Fail2ban封禁。

恶意大文件攻击(如恶意上传超大文件、反复POST巨量数据)会迅速耗尽磁盘空间或触发Nginx连接/内存异常,最终导致服务宕机。排查这类问题,关键在于从日志中识别“大请求体 + 异常行为 + 后果痕迹”三重线索,而不是只看单条记录。
定位大请求体的访问行为
攻击者常通过伪造表单或脚本向上传接口(如 /upload、/api/file)发送超大 body(几十MB甚至GB级),而Nginx默认会将整个请求体缓存到临时目录(client_body_temp_path),一旦磁盘写满,worker进程直接崩溃。
执行以下命令快速筛查可疑请求:
-
查大body请求(单位:字节):
awk '$10 > 10485760 {print $1, $4, $7, $9, $10}' /var/log/nginx/access.log | sort -k5nr | head -20(筛选响应前已接收 >10MB 的请求) -
查高频上传路径:
awk '$7 ~ /\/(upload|file|api\/.*post)/i {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10 -
查非标准方法+大body:
awk '$6 ~ /POST|PUT/ && $10 > 5242880 {print $1, $6, $7, $10}' /var/log/nginx/access.log | head -15(排除正常小POST,聚焦大体积写操作)
关联错误日志确认宕机诱因
仅看 access.log 不够——真正导致宕机的信号藏在 error.log 中。重点搜索以下关键词组合:
-
磁盘满相关:
grep "No space left on device\|writev() failed.*disk" /var/log/nginx/error.log—— 出现即说明 client_body_temp 目录或根分区已满 -
请求体超限拒绝但被绕过:
grep "client intended to send too large body" /var/log/nginx/error.log—— 若该日志极少出现,却突然大量出现,说明攻击者正试探边界 -
worker崩溃前兆:
grep "worker process.*exited.*signal" /var/log/nginx/error.log | tail -10—— 结合时间戳,往前翻看5分钟内的 error.log,常紧随“No space”或“mmap() failed”等系统级报错
验证临时目录与磁盘实际状态
日志线索需落地到系统实况。执行以下检查确认是否为根本原因:
-
查 client_body_temp 路径:运行
nginx -T 2>/dev/null | grep client_body_temp_path;若未显式配置,则默认在/var/cache/nginx/client_temp/(CentOS/RHEL)或/usr/local/nginx/client_body_temp(源码安装) -
查该路径所在分区使用率:
df -h $(dirname $(nginx -T 2>/dev/null | grep client_body_temp_path | awk '{print $2}' | head -1)) -
查临时目录下最大文件:
find /var/cache/nginx/client_temp -type f -size +10M -ls 2>/dev/null | sort -k7nr | head -5
针对性加固与预防措施
确认是恶意大文件攻击后,需立即限制+清理+监控:
-
紧急限制:在 http 或 server 块中加入
client_max_body_size 10m;(根据业务调低,如仅需传头像则设为 2m) -
清空临时文件:停止 Nginx 后执行
rm -f /var/cache/nginx/client_temp/*,再启动(避免重启时因残留大文件再次失败) -
防止重复攻击:对上传路径启用限速,例如
location /upload { limit_req zone=upload burst=2 nodelay; },并配合 Fail2Ban 监控 413 错误频次自动封IP


















