标签归档:流量镜像

Nginx模块ngx_http_mirror_module

最近nginx官网公布了nginx1.13.4最新的ngx_http_mirror_module模块,利用mirror模块,业务可以将线上实时访问流量拷贝至其他环境,该流量可用于压测或者旁路做一些检测。

mirror模块配置分为两部分,源地址和镜像地址配置,配置位置可以为nginx配置文件的http, server, location上下文,配置示例为:

# original配置
location / {
    mirror /mirror;
    mirror_request_body off;
    proxy_pass http://127.0.0.1:9502;
}

# mirror配置
location /mirror {
    internal;
    proxy_pass http://127.0.0.1:8081$request_uri;
    proxy_set_header X-Original-URI $request_uri;
}

 

1)original配置
location /指定了源uri为/
mirror /mirror指定镜像uri为/mirror
mirror_request_body off | on 指定是否镜像请求body部分,此选项与proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering和 uwsgi_request_buffering冲突,一旦开启mirror_request_body为on,则请求自动缓存;
proxy_pass 指定上游server的地址

2)mirror配置
internal 指定此location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
proxy_pass 指定上游server的地址
proxy_set_header 设置镜像流量的头部

整个请求流程为:

1)curl向nginx 80端口发起GET / HTTP请求
2)nginx将请求转发至upstream 9502端口的original PHP脚本,nginx本地端口为51637
3)nginx将请求镜像发至upstream 8081端口的mirror PHP脚本,nginx本地端口为51638
4)original发送响应response to client至nginx
5)nginx将响应转发至curl,curl将响应展示到终端
6)mirror将响应发送至nginx,nginx丢弃。

参考文章:
https://segmentfault.com/p/1210000010610500/read