溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx模塊概述—干貨分享!

發(fā)布時(shí)間:2020-07-05 12:55:49 來源:網(wǎng)絡(luò) 閱讀:490 作者:JarryZ 欄目:建站服務(wù)器

Nginx 工作原理 :

Nginx 由內(nèi)核和模塊組成

1.Nginx 本身做的工作實(shí)際很少,當(dāng)它接到一個(gè) HTTP 請求時(shí), 它僅僅是通過查找配置文件將此次請求映射到一個(gè) location block,而此 location 中所配 置的各個(gè)指令則會(huì)啟動(dòng)不同的模塊去完成工作,因此模塊可以看做 Nginx 真正的勞動(dòng)工作者。
2. 通常一個(gè) location 中的指令會(huì)涉及一個(gè) handler 模塊和多個(gè) filter 模塊(當(dāng)然,多個(gè) location可以復(fù)用同一個(gè)模塊)。handler 模塊負(fù)責(zé)處理請求,完成響應(yīng)內(nèi)容的生成,而 filter 模塊對響應(yīng)內(nèi)容進(jìn)行處理。用戶根據(jù)自己的需要所開發(fā)的模塊都屬于第三方模塊。正是有了這么多模塊的支撐, Nginx 的功能才會(huì)如此強(qiáng)大。

Nginx 的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊:

1.核心模塊:HTTP 模塊、EVENT 模塊和 MAIL 模塊
2.基礎(chǔ)模塊:HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊
3.第三方模塊:HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模塊

Nginx 的模塊從功能上分為如下三類:

1.Handlers(處理器模塊):此類模塊直接處理請求,并進(jìn)行輸出內(nèi)容和修改 headers 信息等操作。Handlers 處理器模塊一般只能有一個(gè)
2.Filters(過濾器模塊):此類模塊主要對其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由 Nginx 輸出3.Proxies(代理類模塊):此類模塊是 Nginx 的 HTTP Upstream 之類的模塊,這些模塊主要與后端一些服務(wù)比如FastCGI 等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。

Nginx的進(jìn)程模型在工作方式上分為單工作進(jìn)程和多工作進(jìn)程兩種模式:

1.在單工作進(jìn)程模式下,除主進(jìn)程外,還有一個(gè)工作進(jìn)程,工作進(jìn)程是單線程的
2.在多工作進(jìn)程模式下,每個(gè)工作進(jìn)程包含多個(gè)線程。Nginx 默認(rèn)為單工作進(jìn)程模式

Nginx 在啟動(dòng)后會(huì)有一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程:

1.master 進(jìn)程主要用來管理 worker 進(jìn)程,主要包含:接收來自外界的信號,向各 worker 進(jìn)程發(fā)送信號,監(jiān)控 worker 進(jìn)程的運(yùn)行狀態(tài),當(dāng) worker 進(jìn)程退出后(異常情況下),會(huì)自動(dòng) 重新啟動(dòng)新的 worker 進(jìn)程。
2.master進(jìn)程充當(dāng)整個(gè)進(jìn)程組與用戶的交互接口,同時(shí)對進(jìn)程進(jìn)行監(jiān)護(hù)。它不需要處理網(wǎng)絡(luò)事件,不負(fù)責(zé)業(yè)務(wù)的執(zhí)行,只會(huì)通過管理worker進(jìn)程來實(shí)現(xiàn)重啟服務(wù)、平滑升級、更換日志文件、配置文件實(shí)時(shí)生效等功能。

Nginx+FastCGI運(yùn)行原理:

Nginx 不支持對外部程序的直接調(diào)用或者解析,所有的外部程序(包括 PHP)必須通過FastCGI 接口來調(diào)用。FastCGI 接口在Linux 下是 socket(這個(gè) socket 可以是文件 socket, 也可以是 ip socket)。 wrapper 為了調(diào)用CGI 程序,還需要一個(gè) FastCGI 的 wrapper(wrapper 可以理解為用于啟動(dòng)另一個(gè)程序的程序),這個(gè) wrapper綁定在某個(gè)固定 socket 上,如端口或者文件 socket。當(dāng) Nginx 將 CGI 請求發(fā)送給這個(gè) socket 的時(shí)候,通過FastCGI 接口,wrapper 接收到請求,然后Fork(派生)出一個(gè)新的線程,這個(gè)線程調(diào)用解釋器或者外部程序處理腳本并讀取返回?cái)?shù)據(jù);接著 wrapper 再將返回的數(shù)據(jù)通過FastCGI 接口,沿著固定的 socket傳遞給 Nginx;最后 Nginx 將返回的數(shù)據(jù)(html 頁面或者圖片)發(fā)送給客戶端。

運(yùn)行原理如下圖:

Nginx模塊概述—干貨分享!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI