摘要:同時若不想破壞已經(jīng)做好的的話,也可以不使用,直接轉(zhuǎn)發(fā)到服務(wù)器的內(nèi)網(wǎng)應(yīng)該也是可以的。這樣在安全和效率高上就都能得到一定的提升。
之前寫了一些nginx的東西,這次繼續(xù),主要使用upstream針對proxy_pass轉(zhuǎn)發(fā)做個處理
一般情況下我們在使用nginx反向代理的時候,都是如下配置,
... location /api { proxy_pass https://b.test.com; # 設(shè)置代理服務(wù)器的協(xié)議和地址 proxy_cookie_domain b.test.com a.test.com; # 修改cookie,針對request和response互相寫入cookie } ...
這樣就實現(xiàn)了"/api"目錄接口的轉(zhuǎn)發(fā)。功能是實現(xiàn)了,但是有什么問題么?還真有!
如果我們可以反向代理,如果別人也知道了我們的接口域名也不是可以自己搭一個nginx服務(wù)器就可以代理到我們的接口服務(wù)器上去???是不是感覺很危險,是的。。。對此當時做的時候就加了一個臨時方案,在接口服務(wù)中添加一個ip白名單,白名單中的ip都是nginx服務(wù)器的ip,然后就項目上線了。這樣也實現(xiàn)了需求,但ip如果被偽造了怎么辦?于是我們想到了另一個方案,使用內(nèi)網(wǎng)IP代替對外開放的域名,這樣在一定程度上就直接攔截了外部的直接訪問,具體實現(xiàn)如下,
upstream apiServer { server 10.10.10.10.:8888 } ... location /api { proxy_pass http://apiServer; proxy_cookie_domain apiServer a.test.com; } ...
我們使用upstream定義了一個apiServer的組,將轉(zhuǎn)發(fā)都指向這里,這時相當于我們把可能存在的用戶直接訪問接口服務(wù)器的可能給關(guān)閉了,也就是途中紅色的那部分危險操作~~
可能你會想upstream的使用純屬多余,的確當apiServer只有一臺機器的時候,這個的確可以不用,但是多臺機器的時候,雖然proxy_pass雖然可以定義多條但是太麻煩了。。。使用upstream組統(tǒng)一管理即可,同時使用upstream還有一些優(yōu)勢比如給多個server設(shè)置負載均衡,upstream組中支持通過weight參數(shù)來設(shè)置當前server在負載均衡中所占的比重,此外還可以通過設(shè)置backup參數(shù)指定某些服務(wù)器作為備份機等等。詳細的配置內(nèi)容還是建議大家參考Nginx upstream官方文檔。
此外,除了安全性方面,使用內(nèi)網(wǎng)ip進行接口轉(zhuǎn)發(fā)也省去了轉(zhuǎn)發(fā)中的DNS重新解析的過程,有利于大幅提升接口轉(zhuǎn)發(fā)效率。同時若不想破壞已經(jīng)做好的SLB的話,也可以不使用upstream,直接轉(zhuǎn)發(fā)到SLB服務(wù)器的內(nèi)網(wǎng)ip應(yīng)該也是可以的。
綜上,在proxy_pass轉(zhuǎn)發(fā)中我們使用了兩種方案來對安全性做一些提升
proxy_pass轉(zhuǎn)發(fā)到外網(wǎng)域名,同時在接口服務(wù)器上添加訪問來源白名單,把nginx服務(wù)器的ip寫進去
proxy_pass轉(zhuǎn)發(fā)到內(nèi)網(wǎng)域名,多服務(wù)器的話使用upstream統(tǒng)一管理并實現(xiàn)負載均衡,也能提升轉(zhuǎn)發(fā)效率
第二種方案是不是通用的呢?這樣可行的話,我們的接口服務(wù)器是不是都不用設(shè)置外網(wǎng)可訪問的域名了呢?
第二種方案是可以通用的,但是這不意味著我們就可以拋棄外部可訪問的域名,因為在一個落地業(yè)務(wù)中,比如第三方授權(quán)、微信支付等情況下外部可訪問域名還是必須要有的。因此只有那些不需要與第三方進行通信,比如僅供公司內(nèi)部使用的管理系統(tǒng)等,就可以直接拋棄外網(wǎng)域名了。此時個人建議就是上面兩種方案結(jié)合一下:
proxy_pass的轉(zhuǎn)發(fā)使用內(nèi)網(wǎng)ip,來提升轉(zhuǎn)發(fā)效率,同時對外部訪問添加白名單,只暴露需要和第三方通信的接口即可。
這樣在安全和效率高上就都能得到一定的提升。
如有錯誤,歡迎大家指正
好好學(xué)習,天天向上~~
此處添加一個修正,最初版原文中在proxy_pass后面我們使用了https+upstream的方式進行轉(zhuǎn)發(fā),但是在生產(chǎn)環(huán)境上發(fā)現(xiàn)使用https出現(xiàn)服務(wù)器502網(wǎng)關(guān)問題。
... location /api { proxy_pass https://apiServer; proxy_cookie_domain apiServer a.test.com; } ...
upstream不用寫https,把https換成了http,問題解決。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/40209.html
摘要:負載均衡嚴格來說,僅僅是作為反向代理的使用的,但是因為這個反向代理功能表現(xiàn)的效果是負載均衡機器的效果,因此負載均衡是特殊的反向代理。 反向代理 反向代理指的是以代理服務(wù)器接收用戶的的訪問請求,代理用戶向內(nèi)部服務(wù)器重新發(fā)起請求,最后把內(nèi)部服務(wù)器的響應(yīng)信息返回給用戶。這樣,代理服務(wù)器對外就表現(xiàn)為一臺服務(wù)器,而訪問內(nèi)部服務(wù)器的客戶端用的就是代理服務(wù)器,而不是真實網(wǎng)站訪問用戶。 為什么使用反向...
摘要:反向代理模塊何為反向代理接收客戶端請求,并把請求交給后端服務(wù)器處理,后端服務(wù)器處理完成后,響應(yīng)通過反向代理服務(wù)器返回給客戶端。作為反向代理服務(wù)器經(jīng)常要配置一組服務(wù)器,以實現(xiàn)負載均衡。 1、nginx反向代理模塊 何為反向代理?接收客戶端請求,并把請求交給后端服務(wù)器處理,后端服務(wù)器處理完成后,響應(yīng)通過反向代理服務(wù)器返回給客戶端。反向代理可實現(xiàn)局域網(wǎng)中的服務(wù)器可被公網(wǎng)中的客戶端訪問,也可實...
摘要:首先,在的主配置文件里先設(shè)置好與緩存相關(guān)的配置這里需要先手工建立與緩存相應(yīng)的目錄,并且把它設(shè)置為可讀寫。另外如果升級成,對不用緩存的部分性能也會有提升,這就不在本文討論的范圍之內(nèi)了。 現(xiàn)有一個系統(tǒng)是用Yii2框架開發(fā)的,Web服務(wù)器采用Nginx+php-fpm,由于沒有使用Nginx的反向代理緩存技術(shù),用Apache的ab一壓就死掉了,QPS只能達到7或者8的水平,像這樣是無法支持高...
摘要:本文介紹三者之間的關(guān)系,以及反向代理和負載均衡的配置。先使用負載均衡模塊找到一臺主機,再使用模塊實現(xiàn)與這臺主機的交互。負載均衡配置該例定義了一個的負載均衡配置,通過反向代理指令應(yīng)用這個配置。 本文介紹 PHP-FPM,Nginx,FastCGI 三者之間的關(guān)系,以及 Nginx 反向代理和負載均衡的配置。 PHP-FPM,Nginx,FastCGI 之間的關(guān)系 FastCGI 是一個協(xié)...
閱讀 1623·2023-04-26 01:36
閱讀 2785·2021-10-08 10:05
閱讀 2832·2021-08-05 09:57
閱讀 1587·2019-08-30 15:52
閱讀 1252·2019-08-30 14:12
閱讀 1375·2019-08-30 11:17
閱讀 3183·2019-08-29 13:07
閱讀 2502·2019-08-29 12:35