nginx流量复制

558 阅读1分钟

流量复制

最近在重构某一个旧的系统,采用全新的框架和数据库来进行处理。后期整体代码功能移植完成后,测试完整功能需要编写很多测试用例,且不能保证在上线替换时,能够完整复现所有问题。一些线上的功能还涉及其他的功能,不能完全测试覆盖到,查询到可以使用nginx流量复制的方式,让生产环境的流量1:1复制到我们的测试环境,进行简单的模拟。到达压测,数据接口验证的目的。

nginx

使用nginx中的mirror功能,在不影响主流量的前提下,复制一部分流量发送到mirror指定的路径中去,并不响应返回。完美的实现了我们流量复制的功能。配置如下:

nginx location配置

image.png

配置镜像的转发地址,同理也是可以配置多个mirror转发到同一个地址,达到流量放大的目的。

nginx mirror接收配置

image.png

转发到本地的9993端口,相应的也可以进行自定义。

  • $request_uri是保证请求的整体链接都可以镜像过来。
  • proxy_pass_request_body 打开请求body的传输,适用post请求
  • proxy_set_header X-Original-URI $request_uri 保证原始域名传输,可以验证跨域等问题

nginx server配置

image.png

监听刚才的9993本地端口,设置访问日志,错误日志路径。后在指向到我们真正想要请求的测试地址。 如果需要查看镜像流量的访问日志,需要配置独立的server,通过镜像转出来进行请求。如果不需要看日志,只需要将nginx server的配置移植到mirror接收配置中即可。