2021-02-01 分類: 網(wǎng)站建設(shè)
很多場景下,不得不承認(rèn)Nginx是個好東西,它給我們的跨系統(tǒng)間的訪問、安全性方面等等,帶來了極大的便利,況且它的性能也極高。
Nginx是一個異步框架的 Web服務(wù)器,可用作正向代理,也可以用作反向代理,負(fù)載平衡器 和 HTTP緩存。最近在項目中通過反向代理解決我們一些的問題,今天創(chuàng)新互聯(lián)就來聊聊它的反向代理。(內(nèi)容均整理來源于網(wǎng)絡(luò))
什么是反向代理?
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。
我們換個方式理解,就是當(dāng)外部網(wǎng)絡(luò)對內(nèi)部網(wǎng)絡(luò)器是不能直接訪問的,要通過一個代理服務(wù)器才能進行訪問,而外部網(wǎng)絡(luò)看到的只是代理服務(wù)器,反饋也是由代理服務(wù)器返回的,外部網(wǎng)絡(luò)對于代理服務(wù)器與內(nèi)部網(wǎng)絡(luò)直接的具體情況是不可見的。
正向代理和反向代理什么區(qū)別?
正向代理是一個位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個請求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端??蛻舳瞬拍苁褂谜虼?。
這里有一個最顯著的區(qū)別是:(可以看下面的圖示來感受)
反向代理的好處:
反向代理在Nginx.conf的簡單配置
server { listen 8182; server_name localhost; ... location / { proxy_pass http://localhost:8082; ... } }
server塊可以理解為一個虛擬主機,此時我們?nèi)绻{(diào)用的是http://localhost:8182時,會將這個請求轉(zhuǎn)發(fā)到http://localhost:8082,因此實際處理這個請求的是http://localhost:8082
使用Nginx后web服務(wù)器如何獲得真實的用戶IP
問題:
當(dāng)使用Nginx后,web服務(wù)器中request.getRemoteAddr(),得到的是Nginx的ip,而不是真實用戶的ip
解決方案:
在nginx.conf的的中的location中添加如下一些配置
server { ... location / { ... proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
然后web服務(wù)端就可以可以通過request.getHeader("X-Forwarded-For");來獲得真實的用戶ip。
首先我們要知道什么是X-Forwarded-For?
X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP 代理或者負(fù)載均衡服務(wù)器時才會添加該項。用于識別通過HTTP代理或負(fù)載平衡器原始IP一個連接到Web服務(wù)器的客戶機地址的非rfc標(biāo)準(zhǔn),當(dāng)Nginx有X-Forwarded-For設(shè)置的話,每次經(jīng)過proxy轉(zhuǎn)發(fā)都會有記錄,格式就是client1, proxy1,proxy2,以逗號隔開各個地址,而且由于他是非rfc標(biāo)準(zhǔn),所以默認(rèn)是沒有的,需要強制添加,通過Proxy轉(zhuǎn)達的時候,后端服務(wù)器看到的遠程ip是Proxy的ip,也就是說如果直接使用request.getHeader("X-Forwarded-For")是獲取不到用戶ip的,那我們要如何設(shè)置獲得用戶ip呢?
此時就需要在nginx配置的location塊中添加
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
注意這里的意思是增加到X-Forwarded-For中,不是覆蓋,而增加后的格式就是之前說的“client1,proxy1....”,默認(rèn)的時候X-Forwarded-For是空的,如果有兩個nginx,并且都配置了上面這個命令,則會在web服務(wù)器的request.getHeader("X-Forwarded-For")獲得的是“用戶ip,第一個nginx的ip”,分別對應(yīng)之前的格式。
proxy_add_forwarded_for包含著兩個格式,前面一部分是請求頭的X-Forwarded-For,而后面$remote_addr,也就是說是遠程用戶的ip
我們來個圖淺顯的解釋下:
X-real-ip與X-Forwarded-For的區(qū)別
最后一跳是反向代理,比如Nginx,一般會是與之直接連接的客戶端IP:X-Real-IP: 3.3.3.3
X-Forwarded-For:1.1.1.1, 2.2.2.2, 3.3.3.3
名稱欄目:Web服務(wù)器Nginx正向代理和反向代理的區(qū)別
標(biāo)題路徑:http://m.newbst.com/news7/98607.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站維護、網(wǎng)頁設(shè)計公司、關(guān)鍵詞優(yōu)化、手機網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容