一、背景
最近nginx官網公布了nginx1.13.4最新的ngx_http_mirror_module模塊,利用mirror模塊,業務可以將線上實時訪問流量拷貝至其他環境,基於這些流量可以做版本發布前的預先驗證,進行流量放大后的壓測等等
mirror模塊配置分為兩部分,源地址和鏡像地址配置,配置位置可以為nginx配置文件的http, server, location上下文,配置示例為:
location / {
root html;
index index.html index.htm;
proxy_pass http://192.168.38.47:8080;
mirror /mirror;
mirror_request_body off;
}
location /mirror {
internal;
proxy_pass http://192.168.39.47:8080$request_uri;
proxy_set_header X-Original-URI $request_uri;
}
拓撲圖
三、配置說明:
1.original配置
- location /指定了源uri為/
- mirror /mirror指定鏡像uri為/mirror
- mirror_request_body off | on 指定是否鏡像請求body部分,此選項與proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering和 uwsgi_request_buffering沖突,一旦開啟mirror_request_body為on,則請求自動緩存;
- proxy_pass 指定數據轉發server的地址
2.mirror配置
- internal 指定此location只能被“內部的”請求調用,外部的調用請求會返回”Not found” (404)
- proxy_pass 指定將鏡像數據發送給test server的地址
- proxy_set_header 設置鏡像流量的頭部
- 原始uri不會鏡像,可以通過$request_uri變量取得原始請求的uri
四、特別說明
在拓撲圖中6.mirror respones中:
test server 返回的數據,nginx接受之后會丟棄,不會轉發給客戶端;因此鏡像過程不影響用戶的正常使用;