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收到两份复制请求

其他流量复制工具介绍

https://segmentfault.com/a/1190000039982660


Nginx流量复制
https://www.hechunyu.com/archives/nginxliu-liang-fu-zhi
作者
chunyu
发布于
2022年06月30日
许可协议