2023年的鐵人賽已經正式落幕,在鐵人賽的第一天我曾經分享過使用CDN的優勢是什麼。今天想來談談CDN背後的運作原理。而說到CDN就不得不說到反向代理,那什麼是反向代理呢?
維基百科這樣說:
反向代理(Reverse proxy)在電腦網路中是代理伺服器的一種。伺服器根據客戶端的請求,從其關聯的一組或多組後端伺服器(如Web伺服器)上取得資源,然後再將這些資源返回給客戶端,客戶端只會得知反向代理的IP位址,而不知道在代理伺服器後面的伺服器叢集的存在。
這些文字對於有底子的工程師來說可以無痛閱讀,但回想當初剛轉職科技業的我看了三天三夜…依然沒明白它在說什麼。所以為了更好的去消化理解,我只好帶入一些生活化的例子來幫助記憶什麼是反向代理,而正向代理又是什麼?
簡單來說,提出需求的那方稱為客戶端
而真正回應需求的叫做伺服器端
所以當我用手機在瀏覽器上面搜尋資料時,我的手機就變成了客戶端,而網路會根據我搜尋的資料找到提供資源的伺服器端,然後伺服器端會回應我的需求。
這邊的代理指的是代理伺服器,用個淺顯易懂的例子來說就是幫我們跑腿的代辦人。
假設我在開發部門,我朋友和我心儀對象同在業務部。
辦公室的座位如下:
我 | 朋友 | 心儀對象
我比較害羞,想要寫情書給心儀對象但是又不想要被他知道是我寫的,於是我將情書拿給朋友,朋友再傳給心儀對象,朋友代理了我傳遞訊息,朋友就是正向代理。然後心儀對象以為情書是朋友寫的所以愛上朋友,徒留我一身傷悲...
我跟心儀對象距離太遠不能直接進行溝通,但因為有正向代理所以能夠突破限制跟他傳遞情書。
(用戶想要訪問某國外網站,但該網站有區域限制無法直接在國內訪問,這時我們可以訪問代理伺服器,通過代理伺服器轉發請求。)
心儀對象不會知道是誰寫情書給他。
(伺服器不會知道用戶的真實IP,只能知道正向代理伺服器的IP。)
朋友會模仿心儀對象的筆跡,如果我老是傳一樣的情書內容給心儀對象,且每次得到的答覆都是一樣時,朋友就會直接模仿心儀對象的筆跡和口吻“你人真好”回覆給我,節省傳給心儀對象和等待他回覆的時間。
(代理端會有緩存機制,如果需求回應已經存在於緩存中,代理伺服器將會直接回應給客戶端。)
假設身為租客的我在找房子,我以為接觸到的是房東,但對方其實並非房東本人而是二房東,二房東幫助真正的房東處理租房事宜,二房東就是反向代理。然後真正的房東其實是可怕的張小姐。
客戶端(租客)發送請求到反向代理伺服器(二房東),反向代理伺服器再把請求轉發給伺服器(房東),再把執行結果返回給客戶端(租客)。
我不知道房東的真實身份。
(用戶不會知道伺服器的IP,只能知道反向代理伺服器的IP。)
二房東知道房東本人很忙,所以找房東的老公幫忙處理租房事宜。
(可以根據所有伺服器的負載情況,將客戶端的請求分發到不同的伺服器上,避免單一伺服器的負載量過大。)
二房東可以保護房東的安全不被外部攻擊。
(可以作為應用層防火牆,提供DDoS防護。)
二房東有房屋的相關資訊和鑰匙,可以直接帶租客去看房,而不必等待很忙的房東排出時間。
(反向代理伺服器可以緩存靜態內容和加速動態內容,提高訪問速度。)
簡而言之,兩者都能提高訪問速度、兩者都能保護真實的另一端。
差別在於:
希望這篇可以幫助一些看文件看到快崩潰的新手工程師。