Nginx的mirror指令示例配置
mirror 流量復制
Nginx的 mirror 指令來自于 ngx_http_mirror_module 模塊 Nginx Version > 1.13.4
mirror 指令提供的核心功能就是流量復制, 至于流量復制要用來干嘛,這個就各取所需了。
先看一段示例配置:
location / { # 開啟流量復制 mirror /mirror; proxy_pass http://backend; } # 復制的流量轉發(fā)到這里 location = /mirror { # internal 標志該location只為內部的重定向服務, 外面來的返回404 internal; # $request_uri 需要顯示指明,因為流量復制過來之后會丟掉request_uri proxy_pass http://test_backend$request_uri; }
有什么實際用處?舉個實際使用的例子:
上篇寫了Nginx的map指令用法其中提到的一個使用cookie進行多環(huán)境分流的例子,同樣的場景, 基于cookie分流遇到的一個問題是:對于第三方的回調請求支持不友好, 因為第三方不可能攜帶我們自定義的cookie來回調我們。這樣說可能沒參與項目的不太好理解, 簡單說是這樣的: 比如我在3環(huán)境和騰訊云做了交互, 之后騰訊云會回調3環(huán)境的一個接口(因為測試多環(huán)境使用同一個域名),完犢子了吧,因為騰訊云沒有帶我們分環(huán)境的cookie, 因此我在3環(huán)境的這個交互一定是無法完成的。
那么如何解決這個問題? mirror 指令可以解決。
- Nginx 會丟棄 mirror 的響應 : 這一點很重要
為了解決第三方回調的問題,我們開啟了Nginx的mirror, 把回調接口的請求復制到測試所有環(huán)境內,總有一個是目標環(huán)境(從業(yè)務上說即使回調到其他環(huán)境也無所謂,所以直接鏡像到所有環(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; }
再舉個實際的例子
灰度驗證
提供給一個思路: 比如你需要改動線上的都個配置,但是不確定是不是有問題的時候, 這個時候其實可以使用一下mirror的流量復制, 先在灰度環(huán)境改掉,然后使用mirror鏡像線上流量到灰度驗證,這時候你只需要觀測灰度的請求是否正常即可。(當然可以自動化程度高一些,自由發(fā)揮), 也可以使用 split_client 指令做部分流量的驗證。
注意點
Nginx會丟棄mirror響應,但是如果mirror過去的請求一直無響應或響應慢的時候,這時會影響主請求的響應速度的。需要注意,一般不會把POST/PUT等會影響數據狀態(tài)的請求做鏡像的, 除非你明確清楚的知道這樣產生的影響并且可以接受.
到此這篇關于Nginx的mirror指令能干啥?的文章就介紹到這了,更多相關Nginx的mirror指令內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
nginx代理轉發(fā)報錯405?Method?Not?Allowed解決
這篇文章主要為大家介紹了解決nginx代理轉發(fā)報錯405?Method?Not?Allowed解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08