帶着問題閱讀
1、什么是代理,代理有什么好處
2、正向代理和負向代理有什么區別
3、反向代理和負載均衡有什么關系
4、四層負載均衡和七層有什么區別
代理
代理,通俗來說好比是中介的角色,比如在生活中我們處理法律問題、房產交易都會請專業人士代為處理。從網絡角度講,就是為事務參與雙方提供連接通道的第三方網絡服務器。
在網絡場景中,根據被代理的角色和作用划分,代理可分為正向代理和反向代理。
正向代理
正向代理是指對客戶端提供的代理服務,在客戶端無法直接訪問服務端的情況下,通過配置代理服務器的方式訪問服務端。
在整個過程中,客戶端請求首先發送到代理服務器,代理服務器再將請求發送到服務端后將結果返回給客戶端。從服務端角度來看,認為代理服務器才客戶端,因此正向代理即代理客戶端與服務端進行交互。比如生活中我們通過代購去購買海外商品,代購就是我們的正向代理。
正向代理通常有以下應用場景:
- 提供網絡通道:解決客戶端由於防火牆或網絡限制無法訪問服務端的問題,如訪問google等國外網站。
- 隱藏客戶端身份:服務端只感知代理服務器,無法獲取真實客戶端,如黑客控制肉雞。
反向代理
反向代理是指對服務端提供的代理服務,通常出於安全考慮,真正的服務端只有內網網絡,無法直接提供對外服務,為此需要設置反向代理服務器,由代理服務器接收外網請求,然后再轉發到內部服務器。從客戶端角度看,代理服務器是提供服務的服務端,因此反向代理即代理服務端與客戶端交互。比如租房遇到的二房東,我們簽合同也是與二房東簽訂,但實際提供住房的是房主。
反向代理通常有以下應用:
- 提供對外服務:代理服務器暴露公網地址,接收請求並轉發到內網服務器。
- 負載均衡:根據預設策略將請求分發到多台服務器。
- 提供安全保障:作為服務端防火牆,避免服務端遭受網絡攻擊。
- 提高訪問速度:基於網絡位置設置就近代理服務器,提高資源獲取速度,如CDN服務器。
區別
- 正向代理代理客戶端,服務端認為請求來自代理服務器;反向代理代理服務端,客戶端認為提供服務的是代理服務器。
- 正向代理通常由客戶端架設,與客戶端同處一個局域網;反向代理由服務端架設,與服務端同處一個局域網。
- 正向代理通常解決訪問限制的問題,反向代理通常解決對外服務和負載均衡的問題。
負載均衡
負載均衡介紹
負載均衡是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(服務器,組件)上進行執行。是解決高性能,單點故障(高可用),擴展性(水平伸縮)的終極解決方案。
負載均衡既有基於軟件的實現方案,也有基於硬件的實現方案。在軟件方案中,又主要有:
-
基於DNS的負載均衡
在DNS服務器中,可以為多個不同的地址配置相同的名字,最終查詢這個名字的客戶機將在解析這個名字時得到其中一個地址,所以這種代理方式是通過DNS服務中的隨機名字解析域名和IP來實現負載均衡。
-
反向代理負載均衡
通常的反向代理技術,支持為同一服務配置多個后端服務器地址,以及設定相應的輪詢策略。請求到達反向代理服務器后,代理通過既定的輪詢策略轉發請求到具體服務器,實現負載均衡,如Nginx的七層配置形式。
-
基於NAT的負載均衡
該技術通過一個地址轉換網關將每個客戶端連接轉換為不同的內部服務器地址,因此客戶端就各自與自己轉換得到的地址上的服務器進行通信,從而達到負載均衡的目的,如LVS和Nginx的四層配置形式。
網絡模型和負載均衡

參照OSI標准網絡模型定義,負載均衡有二、三、四、七層四種負載均衡方式,對應到TCP網絡模型中,即數據鏈路層負載均衡、網絡層負載均衡、傳輸層負載均衡及應用層負載均衡,實際應用中通常采用四層負載均衡和七層負載均衡。
-
四層負載均衡(IP+端口)
四層負載均衡是IP+端口的實現,以TCP協議為例,四層負載只需解析TCP報文頭部,按照負載均衡算法選擇相應服務后端,將報文目的地址和端口修改為真實后端服務器地址和端口,並轉發請求到對應后端服務器。因此在四層負載情況下,負載均衡起到類似路由轉發的效果,TCP連接的建立是客戶端和服務端直接建立的。
四層負載常用軟件有:
- LVS(常用,穩定性最好)
- Nginx(需要額外編譯stream模塊)
- HaProxy
-
七層負載均衡(應用層協議如HTTP)
七層負載也稱為內容交換,通常與具體應用層協議關聯,根據客戶端發送請求內容選擇服務端進行負載轉發,如Nginx基於請求URL配置轉發。七層負載情況下,負載均衡與反向代理類似,客戶端和服務端分別與負載均衡器建立連接,因此效率要低於四層負載。
七層負載常用軟件有:
- HaProxy
- Nginx
- Apache(較少使用)
負載均衡和反向代理
負載均衡與反向代理是兩個概念,由於其網絡架構形式類似(都用於接入服務端),帶來一定程度的混淆。
負載均衡的核心目標在於如何將請求均衡的分發到多個服務端;反向代理的核心目標在於隱藏服務端內部地址並為服務端提供外部訪問方式。出於高可靠機制的考慮,反向代理通常也會為同一服務注冊多個后端地址,因此如Nginx同時提供了反向代理和負載均衡的能力,這也是造成概念混淆的原因。
通常來講經過反向代理,真實服務端對客戶端不可見,代理即客戶端認為的服務端。相較負載均衡,七層負載的請求轉發與反向代理機制類似,而四層負載的NAT形式,是將報文目的地址修改為真實服務后端地址,與反向代理有根本區別。