說起Nginx,我們都知道它可以用來做反向代理。那麼,到底什麼是反向代理,對應的正向代理又是什麼呢?這篇文章就帶大家來了解一下。其中反向代理也是系統架構的重要組成部分。
說起代理其本質上可以理解爲中介。當A和B不方便進行交互時,往往會引入一箇中間角色C,那麼C便是中介,便是代理。
正向代理
正向代理服務器通常位於客戶端和服務器之間,類似一個跳板機,通過代理服務器可以訪問到目標服務器。
正向代理時,通常,客戶端發送對目標服務器的請求,代理服務器在中間將請求轉發給目標服務器,並將結果返回給客戶端。
正向代理時客戶端必須要進行一些特別的設置才能使用。
比如當我們想訪問谷歌,但無法直接訪問,這就需要先通過一個正向代理服務器,請求到代理服務器,再由代理服務器進行訪問,並把訪問結果進行返回。在客戶看來,相當於直接請求谷歌。
正向代理通常用於如下場景:
-
訪問原來無法訪問的資源,如google; -
使用緩衝特性減少網絡使用率,加速訪問資源; -
對客戶端訪問授權,上網進行認證; -
代理可以記錄用戶訪問記錄(上網行爲管理); -
隱藏客戶端身份(目標者不知道幕後操縱者是誰);
反向代理
反向代理(Reverse Proxy)與正向代理恰好相反,代理服務位於服務器端。
對客戶端來說,反向代理服務器就好像是目標服務器。反向代理服務器接收客戶端發來的請求,然後將其分發到內網的服務器,並將內網服務器返回的結果返回給客戶端。
整個過程客戶端並不會感知到反向代理後面的服務,也不需要客戶端做任何設置,只需要把反向代理服務器當成真正的服務器就行。
反向代理的用途:
-
保護和隱藏原始資源服務器,防止攻擊,通常將反向代理作爲公網訪問地址,Web服務器是內網; -
負載均衡,通過反向代理來進行服務器資源的優化處理; -
加密和SSL加速; -
緩存靜態內容; -
壓縮、減速上傳、安全、外網發佈等。
正向代理與反向代理的區別
用途上區分:
-
正向代理:正向代理用途是爲了在防火牆內的局域網提供訪問internet的途徑。 -
反向代理:反向代理的用途是將防火牆後面的服務器提供給internet用戶訪問。
安全性區分:
-
正向代理:正向代理允許客戶端通過它訪問任意網站並且隱蔽客戶端自身,因此必須採取安全措施來確保僅爲經過授權的客戶端提供服務; -
反向代理:對外是透明的,訪問者並不知道自己訪問的是代理。對訪問者而言,它以爲訪問的就是原始服務器。
透明代理
透明代理比較類似正向代理的功能,客戶端根本不需要知道有代理服務器的存在,它改變你的request fields(報文),並會傳送真實IP,多用於路由器的NAT轉發中。
比如爲了工作效率或者安全,A公司屏蔽了QQ軟件的使用。公司在內網和外網的中間插入一個透明代理,根據規則抓取請求內容,遇到qq的請求就把它給屏蔽掉,這樣就完成了透明屏蔽。
小結
正向代理和反向代理的區別在於代理的對象不一樣,正向代理的代理對象是客戶端,反向代理的代理對象是服務端。
代理服務器站在客戶端那邊就是正向代理,代理服務器站在原始服務器那邊就是反向代理。
參考文章:
https://blog.csdn.net/u010454030/article/details/78860412
https://juejin.cn/post/6844904064266960903
https://www.cnblogs.com/anker/p/6056540.html
https://blog.csdn.net/qq_28988969/article/details/82982474
https://www.cnblogs.com/taostaryu/p/10547132.html
本文分享自微信公衆號 - Java中文社羣(javacn666)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。