Nginx流量复制
什么是流量复制
我们把用户访问系统造成的数据传输定义为流量,那么在用户访问系统的过程中,我们可以把进入和流出的数据复制下来,进行保存,待后续使用,即离线模式,或者转发到一个新的服务器,立即使用,即在线模式。
可以用来把生产的流量复制到测试环境
通过nginx ngx_http_mirror_module模块实现
配置文件
server {
listen 8099;
server_name localhost;
location / {
mirror /mirror;
mirror_request_body on;
proxy_pass http://172.23.6.130:9502;
}
location /mirror {
internal;
proxy_pass http://172.23.6.130:9503$request_uri;
proxy_set_header X-Original-URI $request_uri;
}
}
重新加载配置文件
sbin/nginx -s reload
访问nginx 8099端口 请求会被反向代理到172.23.6.130的9502端口,同时也会复制一份流量到9503端口,达到流量复制的目的
测试
在172.23.6.130机器启动监听9502和9503端口
nc -lk 9502
nc -lk 9503
发送请求到nginx
curl -i http://172.23.4.218:8099/123
9502正常收到请求,同时9503也收到复制的请求
流量放大
通过 ngx_http_mirror_module实现流量放大,一个请求复制成多个
通过配置多个mirror实现放大
server {
listen 8099;
server_name localhost;
location / {
mirror /mirror;
mirror /mirror1;
mirror_request_body off;
proxy_pass http://172.23.6.130:9502;
}
location /mirror {
internal;
proxy_pass http://172.23.6.130:9503$request_uri;
proxy_set_header X-Original-URI $request_uri;
}
location /mirror1 {
internal;
proxy_pass http://172.23.6.130:9503$request_uri;
proxy_set_header X-Original-URI $request_uri;
}
}
测试
curl -i http://172.23.4.218:8099/123
9502正常收到一个请求
9503收到两份复制请求
其他流量复制工具介绍
Nginx流量复制
https://www.hechunyu.com/archives/nginxliu-liang-fu-zhi