nginx4層代理和7層代理什么意思? ? ? (推薦學(xué)習(xí):nginx教程)
這里的層是OSI 7層網(wǎng)絡(luò)模型,OSI 模型是從上往下的,越底層越接近硬件,越往上越接近軟件,這七層模型分別是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。
nginx7層是指應(yīng)用層,通常是http 。
代理原理:
4層用的是NAT技術(shù)。NAT英文全稱是“Network Address Translation”,中文意思是“網(wǎng)絡(luò)地址轉(zhuǎn)換”,請求進(jìn)來的時候,nginx修改數(shù)據(jù)包里面的目標(biāo)和源IP和端口,然后把數(shù)據(jù)包發(fā)向目標(biāo)服務(wù)器,服務(wù)器處理完成后,nginx再做一次修改,返回給請求的客戶端。
7層代理:需要讀取并解析http請求內(nèi)容,然后根據(jù)具體內(nèi)容(url,參數(shù),Cookie,請求頭)然后轉(zhuǎn)發(fā)到相應(yīng)的服務(wù)器,轉(zhuǎn)發(fā)的過程是:建立和目標(biāo)機(jī)器的連接,然后轉(zhuǎn)發(fā)請求,收到響應(yīng)數(shù)據(jù)在轉(zhuǎn)發(fā)給請求客戶端。
優(yōu)缺點對比:
性能:
理論上4層要比7層快,因為7層代理需要解析數(shù)據(jù)包的具體內(nèi)容,需要消耗額外的cpu。但nginx具體強(qiáng)大的網(wǎng)絡(luò)并發(fā)處理能力,?對于一些慢連接,nginx可以先將網(wǎng)絡(luò)請求數(shù)據(jù)緩沖完了一次性轉(zhuǎn)發(fā)給上游server,這樣對于上游網(wǎng)絡(luò)并發(fā)處理能力弱的服務(wù)器(比如tomcat),這樣對tomcat來說就是慢連接變成快連接(nginx到tomcat基本上都是可靠內(nèi)網(wǎng)),從而節(jié)省網(wǎng)絡(luò)數(shù)據(jù)緩沖時間,提供并發(fā)性能。
靈活性:
由于4層代理用的是NAT,所以nginx不知道請求的具體內(nèi)容,所以nginx啥也干不了。?用7層代理,可以根據(jù)請求內(nèi)容(url,參數(shù),cookie,請求頭)做很多事情,比如:
a:動態(tài)代理:不同的url轉(zhuǎn)發(fā)到不同服務(wù)器。
b.風(fēng)控:屏蔽外網(wǎng)IP請求某些敏感url;根據(jù)參數(shù)屏蔽某些刷單用戶。
c.審計:在nginx層記錄請求日志。