Nginx流量复制

Posted fuckone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx流量复制相关的知识,希望对你有一定的参考价值。

1. 需求

将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如:

  • 可以验证功能是否正常,以及服务的性能;
  • 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问;
  • 这跟灰度发布还不太一样,镜像流量不会影响真实流量;
  • 可以用来排查线上问题;
  • 重构,假如服务做了重构,这也是一种测试方式;
  • 为了实现流量拷贝,nginx提供了ngx_http_mirror_module模块

2. 源码安装

yum安装没有包含我们所需的ngx_http_mirror_module模块,因此,真正要使用的时候最好还是采用自定义安装,即从源码构建
首先,下载源码 http://nginx.org/en/download....
接下来,编译安装,例如:

./configure
    --sbin-path=/usr/local/nginx/nginx
    --conf-path=/usr/local/nginx/nginx.conf
    --pid-path=/usr/local/nginx/nginx.pid
    --with-http_ssl_module
    --without-http_limit_req_module
    --without-http_mirror_module
    --with-pcre=../pcre-8.43
    --with-zlib=../zlib-1.2.11
    --add-module=/path/to/ngx_devel_kit
    --add-module=/path/to/lua-nginx-module

make & make install

3. 配置

upstream api.abc.com {
    server 127.0.0.1:8080;
}

upstream tapi.abc.com {
    server 127.0.0.1:8081;
}

server {
    listen 80;
   # 源站点
    location /api {
        proxy_pass http://api.cjs.com;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 流量复制
    mirror /newapi; 
    mirror /mirror2;
    mirror /mirror3;

    # 复制请求体
    mirror_request_body on; 
    }

    # 镜像站点
    location /tapi {
        proxy_pass http://tapi.cjs.com$request_uri;
        proxy_pass_request_body on;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4. 文档

  • Nginx文档
    http://nginx.org/en/docs/
    http://nginx.org/en/docs/http...
    http://nginx.org/en/docs/begi...
    http://nginx.org/en/docs/http...
    http://nginx.org/en/docs/conf...

以上是关于Nginx流量复制的主要内容,如果未能解决你的问题,请参考以下文章

Nginx流量复制

Nginx一大实用功能:流量复制

流量复制 - 工具对比

Nginx模块-ngx_http_mirror_module-流量复制

goreplay 镜像nginx web app流量

PouchDB 复制在复制时抛出错误