網站首頁 編程語言 正文
mirror 流量復制
Nginx的 mirror 指令來自于 ngx_http_mirror_module 模塊 Nginx Version > 1.13.4
mirror 指令提供的核心功能就是流量復制, 至于流量復制要用來干嘛,這個就各取所需了。
先看一段示例配置:
location / {
# 開啟流量復制
mirror /mirror;
proxy_pass http://backend;
}
# 復制的流量轉發到這里
location = /mirror {
# internal 標志該location只為內部的重定向服務, 外面來的返回404
internal;
# $request_uri 需要顯示指明,因為流量復制過來之后會丟掉request_uri
proxy_pass http://test_backend$request_uri;
}
有什么實際用處?舉個實際使用的例子:
上篇寫了Nginx的map指令用法其中提到的一個使用cookie進行多環境分流的例子,同樣的場景, 基于cookie分流遇到的一個問題是:對于第三方的回調請求支持不友好, 因為第三方不可能攜帶我們自定義的cookie來回調我們。這樣說可能沒參與項目的不太好理解, 簡單說是這樣的: 比如我在3環境和騰訊云做了交互, 之后騰訊云會回調3環境的一個接口(因為測試多環境使用同一個域名),完犢子了吧,因為騰訊云沒有帶我們分環境的cookie, 因此我在3環境的這個交互一定是無法完成的。
那么如何解決這個問題? mirror 指令可以解決。
- Nginx 會丟棄 mirror 的響應 : 這一點很重要
為了解決第三方回調的問題,我們開啟了Nginx的mirror, 把回調接口的請求復制到測試所有環境內,總有一個是目標環境(從業務上說即使回調到其他環境也無所謂,所以直接鏡像到所有環境), 配置大致是這樣:
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;
}
再舉個實際的例子
灰度驗證
提供給一個思路: 比如你需要改動線上的都個配置,但是不確定是不是有問題的時候, 這個時候其實可以使用一下mirror的流量復制, 先在灰度環境改掉,然后使用mirror鏡像線上流量到灰度驗證,這時候你只需要觀測灰度的請求是否正常即可。(當然可以自動化程度高一些,自由發揮), 也可以使用 split_client 指令做部分流量的驗證。
注意點
Nginx會丟棄mirror響應,但是如果mirror過去的請求一直無響應或響應慢的時候,這時會影響主請求的響應速度的。需要注意,一般不會把POST/PUT等會影響數據狀態的請求做鏡像的, 除非你明確清楚的知道這樣產生的影響并且可以接受.
原文鏈接:https://www.cnblogs.com/chaizhenhua/p/16259719.html
相關推薦
- 2022-11-14 git常用命令行操作
- 2022-12-10 Flutter?狀態管理scoped?model源碼解讀_Android
- 2021-12-08 C++?中的類型詳細_C 語言
- 2022-03-15 azkaban.utils.UndefinedPropertyException: Missing
- 2022-04-28 C#操作進程的方法介紹_C#教程
- 2022-01-25 項目啟動的時候報Exception in thread main 錯誤解決方法
- 2023-07-07 spring security權限路由匹配restful格式的詳情id設計
- 2021-12-10 antd react hooks From表單格式模板
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支