Nginx分流(一条请求复制成多条请求)

3,781 阅读1分钟

需求

A服务器发送一条请求(POST),复制成两条请求以不同的URL同时转发给B服务器和C服务器。
例子:A发送 http://a.com/a 经过Nginx分别向B发送 http://b.com/b 和C发送 http://c.com/c

谈下试错过程

1. 使用反向代理,无法复制请求
2. 使用重定向,post内容不支持,同时无法复制请求
3. 使用upstream来复制访问请求,同时给自己多个不同端口来拦截,拦截后反向代理,并没有被拦截到,这种方式属于负载均衡一类的,无法做到同时发送

最后方案

使用nginx提供的 mirror模块,其实这种需求有个专业的叫法:**引流测试**。你搜下这个就会有很多相关的文章了。

配置实现

最终配置也很简单,在正常的反向代理部分写上 mirror /mirror  #复制子请求的拦截部分,再在下面定义另个location /mirror 即可。

配置文件

include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
upstream self{
# 如果需要使用ip的可以反向代理时候使用这部分内容
        server 192.168.0.74:8080;
}

server {
    listen       8888;
    server_name  a.com;
	location /a {
                mirror /mirror;
                # 需要放大流量 再加一个 mirror /mirror;
                proxy_pass http://b.com/b;
	}
	
	location = /mirror {
		internal;
		proxy_pass http://c.com/c;
	}
}

扩展