小編在面試的時候 被問到了,Nginx4層和Nginx7層,心裏一陣慌張 不就是OSI 4層和7層嘛。難道是問我底層的原理嗎?
4層代理和7層代理什麼意思?
這裏的層是OSI 7層網絡模型,OSI 模型是從上往下的,越底層越接近硬件,越往上越接近軟件,這七層模型分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。
四層就是基於IP + 端口的負載均衡,通過虛擬 IP + 端口接收請求,然後再分配到真實的服務器;
七層通過虛擬的 URL 或主機名接收請求,然後再分配到真實的服務器七層就是基於 URL 等應用層信息的負載均衡。
-
4層是指傳輸層的 tcp / udp 。
-
7層是指應用層,通常是http 。
代理原理:
-
4層 用的是NAT技術。NAT英文全稱是“Network Address Translation”,中文意思是“網絡地址轉換”,請求進來的時候,nginx修改數據包裏面的目標和源IP和端口,然後把數據包發向目標服務器,服務器處理完成後,nginx再做一次修改,返回給請求的客戶端。
-
7層 代理:需要讀取並解析http請求內容,然後根據具體內容(url,參數,cookie,請求頭)然後轉發到相應的服務器,轉發的過程是:建立和目標機器的連接,然後轉發請求,收到響應數據在轉發給請求客戶端
優缺點對比:
- 性能:
理論上4層要比7層快,因爲7層代理需要解析數據包的具體內容,需要消耗額外的cpu。但nginx具體強大的網絡併發處理能力, 對於一些慢連接,nginx可以先將網絡請求數據緩衝完了一次性轉發給上游server,這樣對於上游網絡併發處理能力弱的服務器(比如tomcat),這樣對tomcat來說就是慢連接變成快連接(nginx到tomcat基本上都是可靠內網),從而節省網絡數據緩衝時間,提供併發性能。
- 靈活性:
由於4層代理用的是NAT,所以nginx不知道請求的具體內容,所以nginx啥也幹不了。 用7層代理,可以根據請求內容(url,參數,cookie,請求頭)做很多事情,
比如:
動態代理:不同的url轉發到不同服務器。
風控:屏蔽外網IP請求某些敏感url;根據參數屏蔽某些刷單用戶。
審計:在nginx層記錄請求日誌。