当前位置:首页 > 技术文章 > 正文内容

Nginx流量镜像(Mirror)(nginx流量控制)

arlanguage3个月前 (01-31)技术文章26

简介 > 流量镜像 (Traffic Mirroring),通常用于进行应用版本的测试,它将实时流量的副本发送给被镜像的服务。采用这种方法,可以搭建一个与原环境类似的环境以进行测试,从而提前发现问题。由

流量镜像 (Traffic Mirroring),通常用于进行应用版本的测试,它将实时流量的副本发送给被镜像的服务。采用这种方法,可以搭建一个与原环境类似的环境以进行测试,从而提前发现问题。由于镜像流量存在于主服务关键请求路径带外,终端用户在测试全过程不会受到影响。

Nginx的流量镜像是只复制镜像,发送到配置好的后端,但是后端响应返回到nginx之后,nginx是自动丢弃掉的,这个特性就保证了镜像后端的不管任何处理不会影响到正常客户端的请求。

Nginx 基础流量镜像配置

采用nginx作为流量镜像,需要nginx支持 nginx_http_mirror_module 模块。

在 nginx 1.13.4 之后的怎么自己带 该模块不需要额外安装mirror模块

举个简单的栗子

Nginx复制所有请求流量

upstream service_a {
    server 10.10.1.2:8080;
}

upstream service_b {
    server 10.10.1.3:8080;
}

server {
    server_name mirror.kpl.dev;
    listen 80;

    location / {
        mirror /mirror; # mirror 指令制定镜像 uri 为 /mirror
        proxy_pass http://service_a;
    }

    location = /mirror {
        internal; # internal 指定此 location 只能被“内部的”请求调用,外部的调用请求会返回 ”Not found” (404)
		 rewrite ^/mirror(.*)$ $1$request_uri break;
        proxy_pass http://service_b$request_uri;
    }
}

只允许GET请求

location / {
	mirror /mirror; # mirror 指令制定镜像 uri 为 /mirror
	mirror_request_body off; # off 为不镜像请求body部分
	proxy_pass http://service_a;
}

location = /mirror {
    # 判断请求方法,不是GET返回403
	if($request_method != GET) {
		return 403;
	}
	internal; # internal 指定此 location 只能被“内部的”请求调用,外部的调用请求会返回 ”Not found” (404)
	rewrite ^/mirror(.*)$ $1$request_uri break;
	proxy_pass_request_body off;
	proxy_set_header Content-Length ""; 
	proxy_set_header X-Original-URI $request_uri;
	proxy_pass http://service_b$request_uri;
}

拷贝流量放大

将流量放大,只需要增加多个, mirror 就好

location / {
	mirror /mirror; # mirror 指令制定镜像 uri 为 /mirror
	mirror /mirror; # 每多加一份mirror,流量放大一倍
	proxy_pass http://service_a;
}
   
location = /mirror {
    # 判断请求方法,不是GET返回403
	if($request_method != GET) {
		return 403;
	}
	internal; # internal 指定此 location 只能被“内部的”请求调用,外部的调用请求会返回 ”Not found” (404)
	rewrite ^/mirror(.*)$ $1$request_uri break;
	proxy_pass http://service_b$request_uri;
}

尾巴

如果mirror_request_body或者proxy_pass_request_body设置为 off,则Content-Length必须设置为"" 因为nginx(mirror_request_body)处理post请求时,会根据Content-Length获取请求体, 如果Content-Length不为空,而由于mirror_request_body或者proxy_pass_request_body设置为off, 处理方以为post有内容,当request_body中没有,处理方会一直等待至超时,则前者为off,nginx会报upstream请求超时。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1360.html

分享给朋友:

“Nginx流量镜像(Mirror)(nginx流量控制)” 的相关文章

Nginx详细介绍

本期我们来说一说nginxNginx介绍nginx是俄罗斯人lgor Sysoev(伊戈尔.塞索耶夫)开发的一款高性能HTTP和反向代理服务器。Nginx以高效的epoll、kqueue、eventport作为网络IO模型,在高并发场景下、Nginx能够轻松支持5W并发连接数的响应,并且消耗的服务器...

2020全网最全的Nginx 性能调优实战

1、Nginx运行工作进程数量Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l[root@lx~]# vi/usr/...

nginx监控与调优(三)

nginx监控通常有两种方法:一是status监控;二是ngxtop监控。一、status监控使用status监控的步骤:1.确定nginx中status模块是否已安装[root@localhost sbin]# nginx -V nginx version: nginx/1.13.7 built...

如何在 NGINX 中创建自定义 404 错误页面

每次NGINX在尝试处理客户端请求时遇到错误,它都会返回一个错误。每个错误都包含一个HTTP响应代码和一个简短描述。错误通常通过简单的默认HTML页面显示给用户。幸运的是,您可以配置NGINX以向您的站点或 Web 应用程序的用户显示自定义错误页面。这可以使用 NGINX 的 error_page指...

Nginx系列:图片过滤处理

http_image_filter_module是Nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高;磁盘有限不想生成多余的图片文件的前提下,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是实时计算的结果,所以网站...

从入门到精通,超详细的程序员Java学习路线指南

说明最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里我只是说Java学习路线,因为自己就是学Java的,对Java理当很熟悉,对于其它方...