網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
mirror 流量復(fù)制
Nginx的 mirror 指令來(lái)自于 ngx_http_mirror_module 模塊 Nginx Version > 1.13.4
mirror 指令提供的核心功能就是流量復(fù)制, 至于流量復(fù)制要用來(lái)干嘛,這個(gè)就各取所需了。
先看一段示例配置:
location / {
# 開(kāi)啟流量復(fù)制
mirror /mirror;
proxy_pass http://backend;
}
# 復(fù)制的流量轉(zhuǎn)發(fā)到這里
location = /mirror {
# internal 標(biāo)志該location只為內(nèi)部的重定向服務(wù), 外面來(lái)的返回404
internal;
# $request_uri 需要顯示指明,因?yàn)榱髁繌?fù)制過(guò)來(lái)之后會(huì)丟掉request_uri
proxy_pass http://test_backend$request_uri;
}
有什么實(shí)際用處?舉個(gè)實(shí)際使用的例子:
上篇寫(xiě)了Nginx的map指令用法其中提到的一個(gè)使用cookie進(jìn)行多環(huán)境分流的例子,同樣的場(chǎng)景, 基于cookie分流遇到的一個(gè)問(wèn)題是:對(duì)于第三方的回調(diào)請(qǐng)求支持不友好, 因?yàn)榈谌讲豢赡軘y帶我們自定義的cookie來(lái)回調(diào)我們。這樣說(shuō)可能沒(méi)參與項(xiàng)目的不太好理解, 簡(jiǎn)單說(shuō)是這樣的: 比如我在3環(huán)境和騰訊云做了交互, 之后騰訊云會(huì)回調(diào)3環(huán)境的一個(gè)接口(因?yàn)闇y(cè)試多環(huán)境使用同一個(gè)域名),完?duì)僮恿税桑驗(yàn)轵v訊云沒(méi)有帶我們分環(huán)境的cookie, 因此我在3環(huán)境的這個(gè)交互一定是無(wú)法完成的。
那么如何解決這個(gè)問(wèn)題? mirror 指令可以解決。
- Nginx 會(huì)丟棄 mirror 的響應(yīng) : 這一點(diǎn)很重要
為了解決第三方回調(diào)的問(wèn)題,我們開(kāi)啟了Nginx的mirror, 把回調(diào)接口的請(qǐng)求復(fù)制到測(cè)試所有環(huán)境內(nèi),總有一個(gè)是目標(biāo)環(huán)境(從業(yè)務(wù)上說(shuō)即使回調(diào)到其他環(huán)境也無(wú)所謂,所以直接鏡像到所有環(huán)境), 配置大致是這樣:
location /notify/v1.0/ {
mirror /test-01;
mirror /test-02;
mirror /test-03;
mirror /test-04;
mirror /test-05;
mirror /test-06;
mirror /test-07;
mirror /test-08;
mirror /test-09;
mirror /test-10;
}
location = /test-01 {
internal;
# 頭信息視情況添加/刪除
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://upstream_test-01$request_uri;
}
upstream upstream_test-01 {
server 1.1.1.1:80 weight=100 max_fails=10 fail_timeout=60s;
}
再舉個(gè)實(shí)際的例子
灰度驗(yàn)證
提供給一個(gè)思路: 比如你需要改動(dòng)線上的都個(gè)配置,但是不確定是不是有問(wèn)題的時(shí)候, 這個(gè)時(shí)候其實(shí)可以使用一下mirror的流量復(fù)制, 先在灰度環(huán)境改掉,然后使用mirror鏡像線上流量到灰度驗(yàn)證,這時(shí)候你只需要觀測(cè)灰度的請(qǐng)求是否正常即可。(當(dāng)然可以自動(dòng)化程度高一些,自由發(fā)揮), 也可以使用 split_client 指令做部分流量的驗(yàn)證。
注意點(diǎn)
Nginx會(huì)丟棄mirror響應(yīng),但是如果mirror過(guò)去的請(qǐng)求一直無(wú)響應(yīng)或響應(yīng)慢的時(shí)候,這時(shí)會(huì)影響主請(qǐng)求的響應(yīng)速度的。需要注意,一般不會(huì)把POST/PUT等會(huì)影響數(shù)據(jù)狀態(tài)的請(qǐng)求做鏡像的, 除非你明確清楚的知道這樣產(chǎn)生的影響并且可以接受.
原文鏈接:https://www.cnblogs.com/chaizhenhua/p/16259719.html
相關(guān)推薦
- 2022-06-01 一起來(lái)學(xué)習(xí)C++的動(dòng)態(tài)內(nèi)存管理_C 語(yǔ)言
- 2022-06-16 .Net?Core解決WebAPI中返回時(shí)間格式帶T的問(wèn)題_實(shí)用技巧
- 2022-05-17 go實(shí)現(xiàn)冒泡排序算法_Golang
- 2022-06-12 Python取讀csv文件做dbscan分析_python
- 2022-04-28 C++Stack棧類模版實(shí)例詳解_C 語(yǔ)言
- 2022-05-01 使用GoogleContainerTools容器化jib構(gòu)建docker鏡像_docker
- 2022-08-02 python監(jiān)控日志中的報(bào)錯(cuò)并進(jìn)行郵件報(bào)警_python
- 2022-08-30 C語(yǔ)言中定義與聲明有哪些區(qū)別_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支