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