Nginx流量分级分类需结合日志解析、请求特征识别与规则匹配,通过map模块打标、流式分析聚类及响应头反哺WAF/CDN实现闭环防护。

对 Nginx 访问流量进行分级分类,核心在于结合日志解析、请求特征识别和规则匹配,实现按风险等级、业务价值或行为模式区分流量。不是简单统计 PV 或 IP,而是让每条请求“说话”,知道它来自哪里、想做什么、是否可信。
基于请求特征做基础分级
利用 Nginx 的 $status、$request_method、$http_user_agent、$uri 等变量,在日志中打标或实时判断:
- 高危行为:如
POST /wp-admin/、GET /phpmyadmin/、含union select或../etc/passwd的 query string,可标记为「攻击试探」 - 异常高频:单 IP 在 10 秒内请求 >50 次且路径分散(非爬虫 User-Agent),标记为「扫描流量」
- 业务关键路径:如
/api/order/submit、/login,统一标记为「高价值操作」,需重点监控响应延迟与失败率 - 静态资源请求(
.js、.css、.png)且状态码为 200,标记为「低风险常规流量」
用 map 模块实现动态分类标签
Nginx 自带 map 指令可在配置中定义轻量级分类逻辑,避免每次 rewrite 或 proxy_pass 前调用外部服务:
- 定义来源可信度:
map $http_x_forwarded_for $trust_level { default "untrusted"; "~^10\.|~^192\.168\." "internal"; "~^203\.205\.128\." "cdn"; } - 定义接口敏感度:
map $uri $api_risk { ~^/api/v1/admin/ "critical"; ~^/api/v1/user/ "medium"; ~^/static/ "low"; default "unknown"; } - 配合
log_format将$trust_level和$api_risk写入 access.log,便于后续用 Loki/Prometheus 或 ELK 聚类分析
接入实时流式分析做行为聚类
仅靠 Nginx 静态规则无法识别慢速攻击、账号爆破等渐进行为。建议将 access.log 推送到轻量级流处理组件:
- 用 Filebeat + Logstash 过滤字段,按
client_ip + uri + status统计 1 分钟窗口内失败登录次数,超阈值触发告警 - 用 ClickHouse 表引擎(ReplacingMergeTree)存原始日志,按
toStartOfHour(time)和api_risk做多维下钻,快速定位某小时「critical」接口的异常 UA 分布 - 对同一 IP 的 URI 访问序列建模(如先 /login → 后 /api/profile → 突然 /api/admin/delete),可用 Python 脚本离线跑关联规则,输出可疑会话 ID 回填至 Nginx 的
$sent_http_x_session_risk头供下游鉴权参考
通过响应头反哺前端与 WAF 协同
分类结果不应只停留在监控侧,要形成闭环:
- 对标记为「scan」或「brute」的请求,在响应头中添加
X-Flow-Class: suspicious,前端埋点可记录并上报用户环境指纹 - 将高风险 client_ip 实时同步至云 WAF 黑名单 API(如阿里云 WAF 的
/api/v1/blacklist),延迟控制在 3 秒内 - 对「high-value」接口返回时附带
X-Protect-Level: strict,CDN 层据此启用更严的 Bot 识别策略(如要求 JS Challenge)


















