需监控的高危接口包括登录、密码重置、文件上传、管理后台等,应在nginx中为其配置独立日志并自定义格式;再通过goaccess等工具实时统计30秒内5xx响应占比突增情况。

识别需监控的高危接口
先明确哪些接口容易成为攻击入口,比如登录、密码重置、文件上传、管理后台等路径。在 Nginx 配置中为这些 location 块添加唯一标识,例如使用 log_format 自定义日志字段或通过 access_log 分离记录:
- 在 http 块中定义专用日志格式:log_format security_api '$time_iso8601 $remote_addr "$request" $status $body_bytes_sent';
- 为关键接口启用独立日志:location /api/v1/login { access_log /var/log/nginx/security_login.log security_api; }
- 避免监控全站,聚焦路径明确、业务敏感、权限校验密集的接口,减少误报干扰
实时捕获并提取 5xx 波动特征
Nginx 本身不提供实时统计能力,需配合外部工具采集日志并计算异常模式。核心是关注“短时间窗口内 5xx 比例突增”,而非绝对数量:
- 用 goaccess 或 nginx-log-monitor 实时解析 access_log,每 30 秒统计指定日志文件中 5xx 占比
- 设定基线:正常时段该接口 5xx 占比通常
- 区分 500/502/503/504:502(Bad Gateway)和 504(Gateway Timeout)常与后端被压垮或代理链路异常相关,更可能指向 DDoS 或反向代理层被利用
关联请求上下文定位攻击线索
单纯状态码波动不足以判断是否为安全利用,必须结合请求特征交叉分析:
- 从日志中提取触发 5xx 的 IP、User-Agent、Referer、请求体长度(若记录了 $request_body)、URI 参数长度(如超长 token 或 payload)
- 重点关注:同一 IP 短时高频请求相同接口但参数差异大;User-Agent 为空或含扫描器特征(如 sqlmap、dirb);URI 中出现典型漏洞载荷关键词(union select、../../../etc/passwd、eval()
- 可在 Nginx 中用 map 指令预标记可疑 UA 或路径,再写入日志便于筛选:map $http_user_agent $is_scanner { ~*(sqlmap|nikto|nuclei) 1; default 0; }
集成轻量级告警与响应闭环
将检测结果对接可执行动作的通道,避免只看不处理:
- 用 Python 脚本轮询日志统计结果,满足阈值时调用企业微信/钉钉机器人推送,附带最近 5 条原始日志片段和源 IP
- 自动临时封禁:通过 geo + map + deny 动态生成黑名单,或调用 fail2ban 将恶意 IP 加入 iptables
- 对持续高频 5xx 的 IP,可返回 429 并记录,同时通知后端服务做熔断或限流策略调整,防止因接口崩溃扩大影响面











