背景
Nginx 1.13.4 官方發(fā)布時增加了http_mirror_module模塊拓提,通過mirror模塊,可以實現(xiàn)復(fù)制原始請求發(fā)送到一個特定的環(huán)境鸿吆,同時Nginx會忽略這個復(fù)制的請求的返回值囤采。
利用這一功能我們可以在對線上流量就行copy,基于這些流量惩淳,我們可以做版本發(fā)布前的預(yù)先驗證或者進行放大后的壓測蕉毯。
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監(jiān)聽8080端口代虾,當(dāng)收到所有以/access
開頭的請求時,根據(jù)location /
的配置激蹲,將請求轉(zhuǎn)發(fā)至main_server 服務(wù)器Group的同時棉磨,復(fù)制流量轉(zhuǎn)發(fā)至 location = /mirror
; 在mirror配置塊中internal表示学辱,該請求為內(nèi)部請求乘瓤,如果是外部請求則直接報錯, $request_uri則表示策泣,將原始請求的拼接在mirror_server之后衙傀,proxy_set_header 則表示添加一個header,最后轉(zhuǎn)發(fā)至mirror_server 萨咕。