API中转流量镜像,复制一份请求到审计模型做安全检测

API中转流量镜像的本质是:在请求进入正式业务逻辑之前,额外复制一份原始请求交给审计模型做安全检测,而线上用户拿到的响应仍来自真实业务服务。
这样既能发现攻击行为,又不会因为审计逻辑阻塞主链路。
本文以最常用的 Nginx 中转为例,带你从零配置出可用的流量镜像,并验证检测效果。

先判断你的场景是否适合做镜像

如果你手里有一个 API 中转层(比如反代、网关),同时有独立的审计模型服务,想让它看到每一条请求但又不希望审计模型故障时拖垮业务,流量镜像就比“串行调用”更合适。
典型场景包括:

  • 把所有写操作请求复制到 WAF 或安全模型进行二次检测
  • 将用户请求备份到分析服务,用于离线审计
  • 线上所有请求都要留证,但不想改动业务代码

需要准备一台安装好 Nginx 的服务器(Nginx 1.13 以上自带 mirror 模块,通常无需重新编译),以及一个能接收请求的审计服务地址,例如 http://192.168.1.10:9090/audit
本文假设 Nginx 监听 80 端口,业务后端是 http://127.0.0.1:8080

在 Nginx 里配置请求复制

先打开 Nginx 配置文件,建议在 server 块里单独写一个 /mirror 的 location,用来接收复制的请求,然后再在主接口上开启 mirror 指令。
下面是完整的最小配置片段:

server {
    listen 80;
    server_name api.example.com;

    location /api {
        mirror /mirror;              # 开启镜像,子请求发给 /mirror
        mirror_request_body on;      # 复制 body,保证 POST 内容完整
        proxy_pass http://127.0.0.1:8080;
    }

    location = /mirror {
        internal;                                # 只允许内部调用,外部无法直接访问
        proxy_pass http://192.168.1.10:9090/audit;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Original-URI $request_uri;
    }
}

配置完成后执行 nginx -t 检查语法,再 nginx -s reload 重载。
此时访问 /api 的请求会同时发一份到审计服务,审计服务返回什么内容都不影响主请求,用户拿到的仍是业务后端的响应。

验证复制流量是否到达审计模型

如果你用的是审计模型自带的 Web 界面,直接看有没有新请求进入;
如果审计服务只有日志,就用 tail -f /var/log/audit/access.log 观察。
同时用 curl 打一条测试请求:

curl -X POST "http://api.example.com/api/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}'

正常时业务接口立刻返回结果,审计服务后台也能看到同一条请求内容,且包含 POST body。
如果你发现审计服务收到请求较少,先检查 mirror_request_body on 是否生效——同时确认 Nginx 的错误日志里没有 “upstream timed out” 之类的记录。

避坑:别让镜像拖垮主业务

流量镜像不是万能方案,下面几个坑在线上很常见:

  • 镜像请求会占用连接。Nginx 的 mirror 默认会等待子请求建立连接,如果审计服务响应慢,Nginx worker 连接数会升高。建议给审计服务配置比较短的 proxy_connect_timeout,比如 proxy_connect_timeout 3s;,并合理调整 Nginx 的 worker_connections
  • 审计服务必须是无状态的。复制请求只作检测用,不能影响业务数据;审计模型不要反过来写主业务库。
  • 注意请求体大小限制。如果镜像请求的 proxy_pass 没设 client_max_body_size,大文件上传请求可能被审计端拒绝,导致 Nginx 报 413,间接影响主链路日志排查。
  • 不要用 mirror 做精确计数。镜像子请求是异步处理的,极端情况下可能丢包,如果业务要求“每条必达”,建议改用消息队列或录制回放方案。

常见疑问补充

如果你用的是 APISIX、Kong 这类网关,也可以直接开启流量镜像插件,原理和上面的 Nginx 配置一样。
还有一种做法是在代码层用重放工具(如 GoReplay)抓到流量再转发给审计模型,适合无法修改 Nginx 配置的环境。

最后提醒一句:镜像请求里如果包含用户密码、token 等敏感信息,审计服务端要开启 HTTPS 传输,并控制日志保存权限,避免安全检测反而变成数据泄露点。

你按上面的配置操作一遍,确认审计模型能看到与线上一致的请求,再逐步放开到全量流量就行。
如果遇到子请求超时或日志偏差,优先检查审计服务自身处理速度,而不是盲目加大 Nginx 超时时间。

分享到:
上一篇
中转服务部署Debian Bookworm系统内核参数调优
下一篇
大模型上游返回超长输出导致Nginx
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意