nginx實(shí)現(xiàn)指定url轉(zhuǎn)發(fā)詳解
故事背景
目前有一個(gè)鑒權(quán)服務(wù)流量很大,部署了很多臺(tái)機(jī)器,由于流量太大會(huì)導(dǎo)致整個(gè)現(xiàn)網(wǎng)的網(wǎng)絡(luò)資源不夠用,需要切換一些流量到備災(zāi)機(jī)房,在備災(zāi)節(jié)點(diǎn)也部署多個(gè)服務(wù),分?jǐn)偡?wù)器和網(wǎng)絡(luò)的壓力。但是在后面測(cè)試的時(shí)候發(fā)現(xiàn)有一個(gè)問(wèn)題,有一個(gè)功能會(huì)通過(guò)HTTP請(qǐng)求通知在線的黑名單刷新,走的是內(nèi)網(wǎng),但是現(xiàn)網(wǎng)機(jī)房和備災(zāi)機(jī)房網(wǎng)絡(luò)互不相通,無(wú)法走內(nèi)網(wǎng),所以無(wú)法通知到備災(zāi)的服務(wù)刷新黑名單。
思考方案
遇到這個(gè)問(wèn)題,我的第一反應(yīng)是可以用mq消息隊(duì)列做訂閱服務(wù),當(dāng)離線修改黑名單后,把數(shù)據(jù)放到生產(chǎn)者中,每個(gè)在線的服務(wù)訂閱后可以拉取到信息更新黑名單列表,這個(gè)業(yè)務(wù)場(chǎng)景其實(shí)挺適合用MQ的,因?yàn)槿绻麛U(kuò)容的話直接部署多一個(gè)服務(wù),不需要做另外的配置,目前用HTTP請(qǐng)求通知的話,如果擴(kuò)容需要重新配置多一個(gè)通知的ip......但是,領(lǐng)導(dǎo)可能對(duì)于引入新的中間件覺(jué)得有一些風(fēng)險(xiǎn),所以還是考慮另外的方法。
因?yàn)闊o(wú)法通過(guò)現(xiàn)網(wǎng)機(jī)房直接請(qǐng)求到指定的備災(zāi)機(jī)房的某一臺(tái)機(jī)器上,我就想寫(xiě)一個(gè)java接口,是備災(zāi)機(jī)房專用的,接收到請(qǐng)求之后,會(huì)請(qǐng)求到備災(zāi)的某一臺(tái)機(jī)器上,通過(guò)新寫(xiě)的postPrepareAll()接口,請(qǐng)求到其他的備災(zāi)服務(wù)刷新黑名單。
如圖,請(qǐng)求12.12.12.12/test/postPrepareAll接口,隨機(jī)請(qǐng)求到10.0.0.3,在通過(guò)postPrepareAll,請(qǐng)求所有的服務(wù)(10.0.0.1、10.0.0.2、10.0.0.3)刷新黑名單。
nginx指定路徑轉(zhuǎn)發(fā)
后面領(lǐng)導(dǎo)說(shuō)還有一個(gè)更好的方案,直接用nginx轉(zhuǎn)發(fā)請(qǐng)求就好了,都不用寫(xiě)代碼。我熟悉了下這個(gè)確實(shí)方便很多。因?yàn)閚ginx一般都是用于做反向代理負(fù)載均衡,我都快忘記還有代理轉(zhuǎn)發(fā)的功能了......通過(guò)nginx配置端口或者路徑后綴實(shí)現(xiàn)代理轉(zhuǎn)發(fā)。
端口:
監(jiān)聽(tīng)8881端口的所有路徑轉(zhuǎn)發(fā)到10.0.0.1:8080的服務(wù)下
監(jiān)聽(tīng)8882端口的所有路徑轉(zhuǎn)發(fā)到10.0.0.2:8080的服務(wù)下
server { listen 8881 ; server_name 負(fù)載ip; root html; index index.html index.htm; location / { proxy_pass http://10.0.0.1:8080/; #以下是一些反向代理的配置可刪除 proxy_redirect off; } } server { listen 8882 ; server_name 負(fù)載ip; root html; index index.html index.htm; location / { proxy_pass http://10.0.0.2:8080/; #以下是一些反向代理的配置可刪除 proxy_redirect off; } }
路徑:
監(jiān)聽(tīng)路徑為/test/addblack/1的請(qǐng)求轉(zhuǎn)發(fā)到10.0.0.1:8080/test/addblack
監(jiān)聽(tīng)路徑為/test/addblack/2的請(qǐng)求轉(zhuǎn)發(fā)到10.0.0.2:8080/test/addblack
server { listen 8832 ; server_name 負(fù)載ip; root html; index index.html index.htm; location /test/addblack/1 { proxy_pass http://10.0.0.1:8080/test/addblack; #以下是一些反向代理的配置可刪除 proxy_redirect off; } location /test/addblack/2 { proxy_pass http://10.0.0.2:8080/test/addblack; #以下是一些反向代理的配置可刪除 proxy_redirect off; } }
因?yàn)閮蛇吘W(wǎng)絡(luò)不是互通的,需要開(kāi)通端口訪問(wèn),所以我們選擇了用后綴的方式代理轉(zhuǎn)發(fā),不用開(kāi)通多個(gè)端口的網(wǎng)絡(luò)。
總結(jié)
nginx的負(fù)載均衡本質(zhì)上其實(shí)也是代理轉(zhuǎn)發(fā),只不過(guò)代理的是一個(gè)列表,可以配置權(quán)重、輪詢啥的。還有監(jiān)聽(tīng)某個(gè)端口,或者某個(gè)路徑指定轉(zhuǎn)發(fā)到對(duì)應(yīng)的url中。由于安全原因考慮,很多服務(wù)器沒(méi)有開(kāi)通外網(wǎng)地址訪問(wèn),只有一個(gè)負(fù)載地址,需要通過(guò)nginx做網(wǎng)關(guān)轉(zhuǎn)發(fā)。
到此這篇關(guān)于nginx實(shí)現(xiàn)指定url轉(zhuǎn)發(fā)詳解的文章就介紹到這了,更多相關(guān)nginx指定url轉(zhuǎn)發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Debian下搭建Nginx和Tomcat服務(wù)器實(shí)現(xiàn)負(fù)載均衡的方案
這篇文章主要介紹了Debian下搭建Nginx和Tomcat服務(wù)器實(shí)現(xiàn)負(fù)載均衡的方案,其主要思想依然是動(dòng)靜分離并且以Nginx來(lái)進(jìn)行反向代理這樣的路子,需要的朋友可以參考下2015-12-12nginx-ingress-controller日志持久化方案的解決
這篇文章主要介紹了nginx-ingress-controller日志持久化方案的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03網(wǎng)頁(yè)502?Bad?Gateway?nginx/1.20.1報(bào)錯(cuò)的原因與解決方法
502 bad gateway nginx/1.20.1 是一個(gè)錯(cuò)誤提示,通常出現(xiàn)在訪問(wèn)網(wǎng)站時(shí)出現(xiàn)問(wèn)題,這篇文章主要給大家介紹了關(guān)于網(wǎng)頁(yè)502?Bad?Gateway?nginx/1.20.1報(bào)錯(cuò)的原因與解決方法,需要的朋友可以參考下2024-03-03nginx部署多個(gè)前端項(xiàng)目詳細(xì)步驟
最近一臺(tái)服務(wù)器要配置多個(gè)前端項(xiàng)目,當(dāng)然前后端分離就需要nginx來(lái)配置了,下面這篇文章主要給大家介紹了關(guān)于nginx部署多個(gè)前端項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2023-10-10Nginx配合php實(shí)現(xiàn)生成實(shí)時(shí)縮略圖功能
這篇文章主要介紹了Nginx配合php實(shí)現(xiàn)生成實(shí)時(shí)縮略圖功能,這在一些特殊場(chǎng)合可能會(huì)要用到,需要的朋友可以參考下2014-10-10nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決
這篇文章主要為大家介紹了解決nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08nginx配置SSL證書(shū)實(shí)現(xiàn)https服務(wù)的方法
這篇文章主要介紹了nginx配置SSL證書(shū)實(shí)現(xiàn)https服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Nginx作為反向代理時(shí)傳遞客戶端IP的設(shè)置方法
因?yàn)閚ginx的優(yōu)越性,現(xiàn)在越來(lái)越多的用戶在生產(chǎn)環(huán)境中使用nginx作為前端,不管nginx在前端是做負(fù)載均衡還是只做簡(jiǎn)單的反向代理,都需要把日志轉(zhuǎn)發(fā)到后端real server,以方便我們檢查程序的各種故障2014-08-08