Nginx四層代理和七層代理的用法及區(qū)別說明
4層是指?jìng)鬏攲拥腡CP/UDP協(xié)議
7層是指應(yīng)用層的HTTP協(xié)議
代理原理
4層代理
使用NAT(Network Address Translation)技術(shù),即網(wǎng)絡(luò)地址轉(zhuǎn)換。
即請(qǐng)求進(jìn)來的時(shí)候,nginx只修改數(shù)據(jù)包里面的目標(biāo)IP、源IP、端口,然后就直接把數(shù)據(jù)包發(fā)給目標(biāo)服務(wù)器(即nginx不知道請(qǐng)求的具體內(nèi)容),目標(biāo)服務(wù)器處理完成后,發(fā)給nginx,nginx數(shù)據(jù)包再做一次類似的修改,就返回給請(qǐng)求的客戶端了。
7層代理
nginx讀取并解析Http請(qǐng)求內(nèi)容,然后將具體內(nèi)容(請(qǐng)求行、請(qǐng)求頭、空行、請(qǐng)求數(shù)據(jù))轉(zhuǎn)發(fā)到相應(yīng)的服務(wù)器,轉(zhuǎn)發(fā)的過程是:建立和目標(biāo)機(jī)器的連接,然后轉(zhuǎn)發(fā)請(qǐng)求,收到響應(yīng)數(shù)據(jù)再轉(zhuǎn)發(fā)給請(qǐng)求客戶端。
總結(jié):
- 理論上4層要比7層快,因?yàn)?層代理需要解析數(shù)據(jù)包的具體內(nèi)容,需要消耗額外的cpu。但nginx具體強(qiáng)大的網(wǎng)絡(luò)并發(fā)處理能力, 對(duì)于一些慢連接,nginx可以先將網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)緩沖完,再一次性轉(zhuǎn)發(fā)給上游server(目標(biāo)服務(wù)器),這樣對(duì)于上游網(wǎng)絡(luò)并發(fā)處理能力弱的服務(wù)器(比如tomcat)來說,就是將慢連接變成快連接(nginx到tomcat基本上都是可靠?jī)?nèi)網(wǎng)),從而節(jié)省網(wǎng)絡(luò)數(shù)據(jù)緩沖時(shí)間,提供并發(fā)性能。
- 由于4層代理用的是NAT(“網(wǎng)絡(luò)地址轉(zhuǎn)換”),所以nginx不知道請(qǐng)求的具體內(nèi)容,所以nginx啥也干不了。用7層代理,可以根據(jù)請(qǐng)求內(nèi)容(請(qǐng)求行、請(qǐng)求頭、空行、請(qǐng)求數(shù)據(jù))做很多事情,如動(dòng)態(tài)轉(zhuǎn)發(fā)代理、網(wǎng)關(guān)攔截、記錄請(qǐng)求日志等。
- 由于現(xiàn)在機(jī)器cpu性能都很好,4層代理并沒有明顯的性能優(yōu)勢(shì),而7層代理在業(yè)務(wù)方面優(yōu)勢(shì)明顯,所以一般都是使用7層代理
擴(kuò)展
OSI網(wǎng)絡(luò)模型(共7層)
網(wǎng)絡(luò)模型/七層模型,也稱為OSI(Open System Interconnection)參考模型,從上往下的,越往下越接近硬件,越往上越接近軟件:
上個(gè)圖方便理解和記憶

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問
這篇文章主要介紹了nginx內(nèi)部訪問特性如何實(shí)現(xiàn)靜態(tài)資源授權(quán)訪問方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
如何使用Nginx和uwsgi在自己的服務(wù)器上部署python的flask項(xiàng)目
Nginx 是一個(gè)高性能的 HTTP 和反向代理服務(wù),其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,這篇文章主要介紹了如何使用Nginx和uwsgi在自己的服務(wù)器上部署python的flask項(xiàng)目,需要的朋友可以參考下2023-11-11
Nginx日志定期清理設(shè)置實(shí)現(xiàn)
本文主要介紹了Nginx日志定期清理設(shè)置實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
Nginx 合并請(qǐng)求連接且加速網(wǎng)站訪問實(shí)例詳解
這篇文章主要介紹了Nginx 合并請(qǐng)求連接且加速網(wǎng)站訪問實(shí)例詳解,瀏覽器的并發(fā)請(qǐng)求數(shù)目限制是針對(duì)同一域名的,同一時(shí)間針對(duì)同一域名下的請(qǐng)求有一定數(shù)量限制,超過限制數(shù)目的請(qǐng)求會(huì)被阻塞,需要的朋友可以參考下2019-07-07
詳解Prometheus 抓取 nginx 訪問日志的指標(biāo)
通過結(jié)合NGINX Exporter, Fluentd, Prometheus和Grafana, 可有效監(jiān)控并可視化NGINX中的4xx和5xx狀態(tài)碼日志,首先使用Fluentd收集和解析NGINX日志,再通過Prometheus抓取Fluentd暴露的指標(biāo),本文介紹Prometheus抓取nginx訪問日志的指標(biāo),感興趣的朋友一起看看吧2024-10-10
nginx location中多個(gè)if里面proxy_pass的方法
這篇文章主要介紹了nginx location中多個(gè)if里面proxy_pass的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

