事情是這樣的
一個前后臺分離的專案,前臺使用nginx發布埠為7701,后臺使用tomcat發布埠為7702,在前臺js中進行 Ajax 對后臺請求,這臺服務器是內網,于是把7701的埠映射成外網地址假設為(network:8808),那么可以通過外網連接外網地址訪問到7701的前臺頁面,此時外網并不能做后臺的網路訪問請求,因為7702的埠地址,外網無法訪問,
我們該如何解決
更改前臺7701的 nginx.config 的配置,利用 nginx 的反向代理,將后臺 7702 的地址也放到 7701 的埠下,即訪問的 7702 變成 7701/api(api名字可以自己指定),然后將前端 js 請求后臺的base地址改成( network:8808/api )
server {
listen 7701;
server_name 192.168.0.67;
location ^~/service {
proxy_pass http://192.168.0.67:7702/;
}
location / {
root D:\dist\app;
index index.html;
}
}
學習內容
nginx 反向代理,那么反向代理到底是什么
知乎精辟 :正向代理就是隱藏真實的客戶端,反向代理就是隱藏真實的服務端,(其實也不是每個人都能理解這句話的,比如我剛開始看到的時候,)
參考博客 : https://segmentfault.com/q/1010000003491873
博客摘要 :
A 找 B 直接溝通,這就等于沒有什么代理;
然而中間夾一個傳話的 C,C 就是代理了,A 通過 C 把資訊傳遞給 B,然后 C 再把 B 的反饋轉達給 A,
在這個程序中,A 知道溝通的直接目標是 B,只不過由于各種原因無法直接和 B 面對面,需要中間人 C,這就是所謂“正向代理”,其實我們很少說正向代理,在英文原文里,這個叫 Forward Proxy,一般就直接叫代理,你翻譯成“轉交代理”或“傳達代理”都比“正向代理”強,然而沒必要,因為代理這個詞的本意就是如此,
另外一種情況則是:A 并不知道 B 的存在,它只知道找 C 就可以得到想要的回復,對于 A 來說有沒有 B 或者有多少個 B、D、E、F……都不重要,只要有 C 就夠了,而 C 則根據情況去獲取反饋然后回應給 A,
這種就叫反向代理了,理解其中的區別不要從“正反”兩個反義方向詞上做文章,英文里的 Forward 和 Reverse 并不是一對反義詞,Forward 和 Backward 才是,然而 Reverse 和 Backward 并不是一個意思……所以說技術書籍資料還就是得看原文的啊,
Forward Proxy(代理)
我想訪問 www.google.com,然而大家都知道它被墻了,我沒法直接訪問它,于是我連接了一個 VPN 服務并設定其為本地 HTTP 訪問的代理(比如說在 Mac 下勾選“通過 VPN 連接發送所有流量),然后我再訪問 www.google.com,此時我的請求被該 VPN 服務代理了,它幫我訪問了 www.google.com 然后把結果回傳給我,
這個例子是代理的一種應用場景,但并非代表代理只能用于這個
最重要的特征是我知道 www.google.com 的存在,而且我訪問的網址也的確是 www.google.com,只不過我的訪問請求經由了 VPN 代理來轉交,同樣回應也是如此
在本例中,代理是透明的,用戶有可能不知道它的存在(通常是知道的,只不過代理的設定可能不是他自己來做)
Reverse Proxy(反向代理)
我有一個 Nginx 服務部署在 www.mysite.com 的 80 埠,用戶訪問它就可以看見我做的網站;在我的網站中有一些 Ajax 請求去獲取 JSON 資料,然而提供這些資料的 API Service 部署在服務器上的 8000 埠,該埠由于防火墻的阻撓使得用戶無法直接訪問到,
于是我重新配置了 Nginx,讓它把所有經由 :80/api/ 的訪問請求都代理給 localhost:8000,然后把回應回傳給原始的請求方(即:Origin Host),這就是反向代理,現在我的用戶可以正常訪問 www.mysite.com 啦,
同上,這是反向代理的一種應用場景,但并非代表它只能這樣用
最重要的特征是我的用戶壓根不知道 localhost:8000 這個服務的存在,并且即使知道也訪問不到——開 VPN 也訪問不到,這是倆碼事!
對于用戶來講,唯一的“對話”方只有 www.mysite.com(80 埠),他們不知道也不必知道后面發生了什么
個人總結:
正向代理在客戶端做代理(比如瀏覽器設定代理服務器),反向代理就是在服務端做代理(比如上方我把 7702 服務端的地址用了 7701/api 地址代理),
如有錯誤,敬請指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174392.html
標籤:Java
