背景
Nginx 1.13.4 官方发布时增加了http_mirror_module模块,通过mirror模块,可以实现复制原始请求发送到一个特定的环境,同时Nginx会忽略这个复制的请求的返回值。
利用这一功能我们可以在对线上流量就行copy,基于这些流量,我们可以做版本发布前的预先验证或者进行放大后的压测。
How to use it
下载1.13.4以后版本的Nginx,安装完成之后,修改Nginx的配置文件nginx.conf如下
http {
upstream mirror_server {
server mirror_server_host:8080;
}
upstream main_server {
server main_server1:8080;
server main_server2:8080 backup;
}
server {
listen 8080;
server_name localhost;
location /access {
mirror /mirror;
proxy_pass http://main_server;
}
location = /mirror {
internal;
proxy_pass http://mirror_server$request_uri;
proxy_set_header X-Original-URI $request_uri;
}
}
}
Server监听8080端口,当收到所有以/access
开头的请求时,根据location /
的配置,将请求转发至main_server 服务器Group的同时,复制流量转发至 location = /mirror
; 在mirror配置块中internal表示,该请求为内部请求,如果是外部请求则直接报错, $request_uri则表示,将原始请求的拼接在mirror_server之后,proxy_set_header 则表示添加一个header,最后转发至mirror_server 。
网友评论