房地產(chǎn)營銷門戶網(wǎng)站建設(shè)鄭州網(wǎng)站建設(shè)價格
文章目錄
- 一. 什么是Nginx
- 二. ngnix的一些模型
- 1、nginx的進(jìn)程模型
- 2、worker的搶占(鎖)機制模型
- 3. nginx事件處理模型
- 三. nginx加載靜態(tài)資源的過程
一. 什么是Nginx
Nginx是一個高性能HTTP反向代理服務(wù)器,以下是nginx的相關(guān)能力
- 反向代理:nginx選擇去將請求路由到那個ip
- 通過配置文件實現(xiàn)集群、負(fù)載均衡
- 可以處理2-3萬并發(fā)連接數(shù),官方監(jiān)測能支持5萬并發(fā)
- 靜態(tài)資源服務(wù)器:通過將靜態(tài)資源變成為服務(wù)。
- 網(wǎng)關(guān):對接口進(jìn)行攔截,配置安全管理
?
正向代理與反向代理的概念
正向代理:請求直接到達(dá)目標(biāo)服務(wù)器
反向代理:請求被Nginx統(tǒng)一接收,反向代理服務(wù)器接收到之后,按照一定的規(guī)則將請求分發(fā)給指定服務(wù)器(通過http模塊)
反向代理的優(yōu)點:可以隱藏服務(wù)器的存在和特征,充當(dāng)client和服務(wù)器的中間層,這是比較安全的。
?
二. ngnix的一些模型
1、nginx的進(jìn)程模型
nginx采用單主進(jìn)程,多子進(jìn)程的模型
配置位置:nginx.conf
worker_processes 默認(rèn)為1,也可以配置為:worker_processes auto;
請求過程:
從客戶端(前端頁面請求、postman請求)到nginx(master)接收請求,分發(fā)請求到工作進(jìn)程,工作進(jìn)程處理請求并將返回結(jié)果發(fā)送給客戶端,最后管理nginx與客戶端的鏈接。
- 客戶端發(fā)送請求:當(dāng)客戶端發(fā)送HTTP請求到Nginx服務(wù)器時,Nginx會監(jiān)聽并接收這個請求。
- Nginx接收請求:Nginx的主進(jìn)程接收到客戶端的請求后,會將請求分發(fā)給工作進(jìn)程(worker process)來處理。
- 工作進(jìn)程處理請求:工作進(jìn)程會根據(jù)Nginx的配置文件中的規(guī)則,對請求進(jìn)行處理。這包括處理靜態(tài)文件、代理請求到后端服務(wù)器、負(fù)載均衡等操作。
- 響應(yīng)客戶端:工作進(jìn)程處理完請求后,會生成相應(yīng)的HTTP響應(yīng),并將響應(yīng)發(fā)送回給客戶端。
- 關(guān)閉連接:一旦響應(yīng)發(fā)送給客戶端,Nginx會關(guān)閉與客戶端的連接,釋放資源。
注意:
- master監(jiān)控worker的健康狀況,如果有關(guān)閉的worker進(jìn)程,會重啟新的worker進(jìn)程。
- worker之間相互獨立。
查看主進(jìn)程和工作進(jìn)程
ps -ef | grep nginx
看到有一個主進(jìn)程,若干work進(jìn)程。
?
2、worker的搶占(鎖)機制模型
假設(shè)一個master開啟三個worker子進(jìn)程,
此時client發(fā)起請求,三個worker去搶占互斥鎖accep_mutex,假設(shè)worker1搶到了就處理請求,其他worker等待worker1處理完一個請求并將結(jié)果返回給client后,重新?lián)屨兼i。
?
3. nginx事件處理模型
當(dāng)client向worker1請求堵塞時,其他client可以接著發(fā)出請求到work1,是異步非堵塞模型。
為什么Nginx性能這么高?
因為他的事件處理機制為異步非阻塞事件處理機制:運用了epoll模型,提供了一個隊列,排隊解決
非阻塞使得系統(tǒng)資源開銷遠(yuǎn)遠(yuǎn)小于阻塞模式,因為系統(tǒng)不需要創(chuàng)建新的進(jìn)程(或線程)。
?
三. nginx加載靜態(tài)資源的過程
nginx接受客戶端請求并找到靜態(tài)資源的過程
加載過程:
- 客戶端請求:在頁面上輸入http:ip:80/ 。路由“/”的請求會請求到Nginx服務(wù)器,
- nginx監(jiān)聽到來自80端口的請求,接著找到監(jiān)聽80端口的server,最后server加載默認(rèn)的html
這里通過一個簡單的server塊配置理解下server:
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}
這里表示一臺server,監(jiān)聽80端口,server_name對應(yīng)client的請求ip、hostname,當(dāng)server監(jiān)聽到之后會加載nginx目錄(可配)下html目錄配置的文件。
接著詳細(xì)描述一下:
- server指令用于定義一個虛擬主機(Virtual Host),即一個獨立的服務(wù)器實例。每個server塊都包含了對特定域名或IP地址的請求的處理規(guī)則
- 端口:server塊的監(jiān)聽端口,即當(dāng)有固定端口的進(jìn)程請求時,server會進(jìn)行攔截
- 域名和IP地址:可以使用servername指令來指定server塊所匹配的域名或IP地址。例如,servername example.com;表示匹配域名為example.com的請求。
- 請求處理:攔截請求后,根據(jù)配置進(jìn)行相對應(yīng)的請求:如代理、重定向、靜態(tài)文件處理等。例如,可以使用location指令來匹配要請求的URL
- SSL/TLS支持:如果需要啟用HTTPS協(xié)議,可以在server塊中配置SSL/TLS證書和相關(guān)參數(shù),以實現(xiàn)安全的通信。
- 負(fù)載均衡:Nginx還支持負(fù)載均衡功能,可以在server塊中配置upstream指令,將請求分發(fā)給多個后端服務(wù)器,以提高系統(tǒng)的性能和可靠性。