nginx流量镜像

1.13.4版本后自带ngx_http_mirror_module模块

 

复制线上真实流量,在不影响真实业务前提下,利用复制流量来做故障分析、性能定位、迁移评估等功能。具体功能包含:

  • 支持或禁止post请求复制
  • 记录复制(镜像)日志

mirror: 中文为镜像的意思,这里指流量复制的目的地。

upstream stutymirror {
    server 172.17.18.118:8101; 
}

server {
    listen       443 ssl;
    server_name   www.aaa.com;

    access_log  /var/log/nginx/ent.access.log  main;
    error_log /var/log/nginx/ent.error.log;
    #ssl on;
    ssl_certificate  /data/cert/aaa.com.pem; 
    ssl_certificate_key /data/cert/aaa.com.key;   
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    client_max_body_size 10M;

    location ~* ^/wx/.*$ {
        proxy_set_header       Host $host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        mirror /mirror1;                                           #源站配置
        mirror_request_body on;
        if ($request_uri ~ /wx/(.+))
        {
            set $params $1;
        }
        proxy_pass http://172.17.18.88:7799/wx/$1;
    }

    # 镜像站点配置
    location = /mirror1 {
        internal;
        proxy_pass http://stutymirror$request_uri;
        proxy_pass_request_body on;
        #proxy_set_header X-Original-URI $request_uri;
    }


    location / {
        proxy_set_header       Host $host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        root /data/enterprise/;
        index index.html;
        try_files $uri $uri/ /index.html;
    }  



    error_page   500 502 503 504 /50json.html;
    location = /50json.html {
        root   /usr/share/nginx/html;
    }
}

不允许post请求

upstream stutymirror {
    server 172.17.18.118:8101; 
}

server {
    listen       443 ssl;
    server_name   www.aaa.com;

    access_log  /var/log/nginx/ent.access.log  main;
    error_log /var/log/nginx/ent.error.log;
    #ssl on;
    ssl_certificate  /data/cert/aaa.com.pem; 
    ssl_certificate_key /data/cert/aaa.com.key;   
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    client_max_body_size 10M;

    location ~* ^/wx/.*$ {
        proxy_set_header       Host $host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        mirror /mirror1;                                           #源站配置
        mirror_request_body off;
        if ($request_uri ~ /wx/(.+))
        {
            set $params $1;
        }
        proxy_pass http://172.17.18.88:7799/wx/$1;
    }

    # 镜像站点配置
    location = /mirror1 {
        # 判断请求方法,不是GET返回403
        if ($request_method != GET) {
            return 403;
        }
        internal;
        proxy_pass http://stutymirror$request_uri;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";  # mirror_request_body/proxy_pass_request_body都设置为off,则Conten-length需要设置为"",否则有坑
        proxy_set_header X-Original-URI $request_uri; # 使用真实的url重置url
    }


    location / {
        proxy_set_header       Host $host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        root /data/enterprise/;
        index index.html;
        try_files $uri $uri/ /index.html;
    }  



    error_page   500 502 503 504 /50json.html;
    location = /50json.html {
        root   /usr/share/nginx/html;
    }
}

其实是转载的,当初只是记录在自己的有道笔记上,现在整理,忘了从哪转来的了,内容是我在我环境下更改测试的,抱歉原创。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值