Nginx的mirror指令示例配置
mirror 流量復(fù)制
Nginx的 mirror 指令來自于 ngx_http_mirror_module 模塊 Nginx Version > 1.13.4
mirror 指令提供的核心功能就是流量復(fù)制, 至于流量復(fù)制要用來干嘛,這個就各取所需了。
先看一段示例配置:
location / {
# 開啟流量復(fù)制
mirror /mirror;
proxy_pass http://backend;
}
# 復(fù)制的流量轉(zhuǎn)發(fā)到這里
location = /mirror {
# internal 標(biāo)志該location只為內(nèi)部的重定向服務(wù), 外面來的返回404
internal;
# $request_uri 需要顯示指明,因?yàn)榱髁繌?fù)制過來之后會丟掉request_uri
proxy_pass http://test_backend$request_uri;
}有什么實(shí)際用處?舉個實(shí)際使用的例子:
上篇寫了Nginx的map指令用法其中提到的一個使用cookie進(jìn)行多環(huán)境分流的例子,同樣的場景, 基于cookie分流遇到的一個問題是:對于第三方的回調(diào)請求支持不友好, 因?yàn)榈谌讲豢赡軘y帶我們自定義的cookie來回調(diào)我們。這樣說可能沒參與項(xiàng)目的不太好理解, 簡單說是這樣的: 比如我在3環(huán)境和騰訊云做了交互, 之后騰訊云會回調(diào)3環(huán)境的一個接口(因?yàn)闇y試多環(huán)境使用同一個域名),完?duì)僮恿税?,因?yàn)轵v訊云沒有帶我們分環(huán)境的cookie, 因此我在3環(huán)境的這個交互一定是無法完成的。
那么如何解決這個問題? mirror 指令可以解決。
- Nginx 會丟棄 mirror 的響應(yīng) : 這一點(diǎn)很重要
為了解決第三方回調(diào)的問題,我們開啟了Nginx的mirror, 把回調(diào)接口的請求復(fù)制到測試所有環(huán)境內(nèi),總有一個是目標(biāo)環(huán)境(從業(yè)務(wù)上說即使回調(diào)到其他環(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;
}再舉個實(shí)際的例子
灰度驗(yàn)證
提供給一個思路: 比如你需要改動線上的都個配置,但是不確定是不是有問題的時候, 這個時候其實(shí)可以使用一下mirror的流量復(fù)制, 先在灰度環(huán)境改掉,然后使用mirror鏡像線上流量到灰度驗(yàn)證,這時候你只需要觀測灰度的請求是否正常即可。(當(dāng)然可以自動化程度高一些,自由發(fā)揮), 也可以使用 split_client 指令做部分流量的驗(yàn)證。
注意點(diǎn)
Nginx會丟棄mirror響應(yīng),但是如果mirror過去的請求一直無響應(yīng)或響應(yīng)慢的時候,這時會影響主請求的響應(yīng)速度的。需要注意,一般不會把POST/PUT等會影響數(shù)據(jù)狀態(tài)的請求做鏡像的, 除非你明確清楚的知道這樣產(chǎn)生的影響并且可以接受.
到此這篇關(guān)于Nginx的mirror指令能干啥?的文章就介紹到這了,更多相關(guān)Nginx的mirror指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx服務(wù)器中的模塊編寫及相關(guān)內(nèi)核源碼初探
這篇文章主要介紹了Nginx服務(wù)器中的模塊編寫及相關(guān)源碼初探,文中以一個簡單的Hello world模塊的編寫來深入分析Nginx內(nèi)核所用到的基礎(chǔ)函數(shù),需要的朋友可以參考下2015-12-12
nginx支持帶下劃線的header實(shí)現(xiàn)
如果header name中包含下劃線,則忽略掉,本文主要介紹了nginx支持帶下劃線的header實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Keepalived實(shí)現(xiàn)Nginx負(fù)載均衡高可用的示例代碼
這篇文章主要介紹了Keepalived實(shí)現(xiàn)Nginx負(fù)載均衡高可用的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Nginx?504?Gateway?Time-out的兩種最新解決方案
大家在訪問網(wǎng)站的時候通常會遇到502錯誤、404錯誤等,很少會遇到504錯誤,但是在我們?nèi)ピL問大流量或者內(nèi)容數(shù)據(jù)量較多的網(wǎng)站時,打開網(wǎng)頁偶爾就會出現(xiàn)504 gateway time-out,這篇文章主要給大家介紹了關(guān)于Nginx?504?Gateway?Time-out的兩種解決方案,需要的朋友可以參考下2022-08-08
linux設(shè)置Nginx自動重啟的實(shí)現(xiàn)
在Linux系統(tǒng)中,設(shè)置Nginx服務(wù)開機(jī)自動啟動及意外停止后自動重啟是保持服務(wù)穩(wěn)定運(yùn)行的關(guān)鍵步驟,本文詳細(xì)介紹了如何使用systemctl命令和配置systemd服務(wù)文件來實(shí)現(xiàn)這一功能,感興趣的可以了解一下2024-09-09

