Nginx 4層和7層

小編在面試的時候 被問到了,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層記錄請求日誌。

由於現在機器cpu性能都很好,4層代理並沒有明顯的性能優勢,而7層代理在業務層面優勢明顯,所以一般直接選擇7層代理就OK了。

參考地址:https://www.cnblogs.com/kevin7234/p/10641508.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章