0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Nginx架構(gòu)介紹 Nginx服務器模型分析

西西 ? 來源:51CTO ? 2019-01-10 16:32 ? 次閱讀

Nginx是一款免費的、開源的、高性能、模塊化、輕量級的HTTP服務器、反向代理服務器以及電子郵件(IMAP/POP3)代理服務器。

很多大型的網(wǎng)站都使用Nginx,如:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。

1.Nginx的整體架構(gòu)簡介

Nginx架構(gòu)介紹 Nginx服務器模型分析

1)Nginx啟動后,會產(chǎn)生一個主進程,主進程執(zhí)行一系列的工作后會產(chǎn)生一個或者多個工作進程;

2)在客戶端請求動態(tài)站點的過程中,Nginx服務器還涉及和后端服務器的通信。Nginx將接收到的Web請求通過代理轉(zhuǎn)發(fā)到后端服務器,由后端服務器進行數(shù)據(jù)處理和組織;

3)Nginx為了提高對請求的響應效率,降低網(wǎng)絡壓力,采用了緩存機制,將歷史應答數(shù)據(jù)緩存到本地。保障對緩存文件的快速訪問;

2. Nginx的模塊化

高度模塊化的設計是 Nginx 的架構(gòu)基礎。Nginx嚴格遵循“高內(nèi)聚,低耦合”的原則,將服務器設計為多個模塊,每個模塊就是一個獨立的功能模塊,只負責自身的功能。

Nginx架構(gòu)介紹 Nginx服務器模型分析

這5個模塊從上到下重要性依次遞減。

(1)核心模塊

核心模塊是Nginx服務器正常運行必不可少的模塊,如同操作系統(tǒng)的內(nèi)核。它提供了Nginx最基本的核心服務。像進程管理、權(quán)限控制、錯誤日志記錄等;

(2)標準HTTP模塊

標準HTTP模塊支持標準的HTTP的功能;

(3)可選HTTP模塊

可選HTTP模塊主要用于擴展標準的HTTP功能,讓Nginx能處理一些特殊的服務;

(4)郵件服務模塊

郵件服務模塊主要用于支持Nginx的郵件服務;

(5)第三方模塊

第三方模塊是為了擴展Nginx服務器應用,完成開發(fā)者想要的功能;

3.Nginx的Web請求處理機制

從架構(gòu)設計上說,Nginx服務器是與眾不同的。其一在于它的模塊化設計;其二也是更重要的一點在于它對與客戶端請求的處理機制上。 Nginx請求處理機制結(jié)合多進程機制和異步非阻塞機制。

1)多進程

多進程方式指服務器每當收到一個客戶端請求時就由服務器主進程生成一個子進程出來和客戶端建立連接進行交互,直到連接斷開,該子進程就結(jié)束了。多進程方式的優(yōu)點是設計簡單,各個子進程相對獨立,處理客戶端請求時彼此不受干擾;缺點是操作系統(tǒng)生成一個子進程需要進行內(nèi)存復制等操作,在資源和時間上會產(chǎn)生一定的開銷;當有大量請求時,會導致系統(tǒng)性能下降;

2)異步非阻塞

發(fā)送方向接收方發(fā)送請求后,不用等待響應,可以繼續(xù)其他工作;接收方處理請求時進行的IO操作如果不能馬上得到結(jié)果,也不必等待,而是馬上返回去去做其他事情。當IO操作完成以后,將完成狀態(tài)和結(jié)果通知接收方,接收方再響應發(fā)送方。

4. Nginx服務器的事件驅(qū)動模型

從上面我們可以知道,Nginx服務器的工作進程調(diào)用IO后,就取進行其他工作了;當IO調(diào)用返回后,會主動通知工作進程。像select/poll/epoll等這樣的系統(tǒng)調(diào)用就是用來支持這種解決方案的。這些系統(tǒng)調(diào)用也常被稱為事件驅(qū)動模型,他們提供了一種機制就只讓進程同時處理多個并發(fā)請求,不用關(guān)心IO調(diào)用的具體狀態(tài)。IO調(diào)用完全由事件驅(qū)動模型來管理。

Nginx架構(gòu)介紹 Nginx服務器模型分析

如上圖所示,Nginx的事件驅(qū)動模型由事件收集器、事件發(fā)送器和事件處理器三部分基本單元組成。

select,poll,epoll都是IO多路復用的機制。I/O多路復用就是通過一種機制,一個進程可以監(jiān)視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。select,poll,epoll本質(zhì)上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責進行讀寫,也就是說這個讀寫過程是阻塞的。

5. Nginx服務器Master-Worker進程處理模型

Nginx架構(gòu)介紹 Nginx服務器模型分析

Nginx服務器在使用Master-Worker模型時,會涉及到主進程和工作進程的交互和工作進程之間的交互。這兩類交互都依賴于管道機制。

Master-Worker交互

這條管道與普通的管道不同,它是由主進程指向工作進程的單向管道,包含主進程向工作進程發(fā)出的指令,工作進程ID等;同時主進程與外界通過信號通信;

Worker-Worker交互

這種交互是和Master-Worker交互是基本一致的,但是會通過主進程。工作進程之間是相互隔離的,所以當工作進程W1需要向工作進程W2發(fā)指令時,首先找到W2的進程ID,然后將正確的指令寫入指向W2的通道。W2收到信號采取相應的措施。

通過這篇文章,我們對Nginx服務器的整體架構(gòu)有了一個整體的認識。另外推薦大家多看看Nginx的源碼,以便能更好地領悟 Nginx的設計思想。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關(guān)注

    關(guān)注

    12

    文章

    8849

    瀏覽量

    84950
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    141

    瀏覽量

    12146
收藏 人收藏

    評論

    相關(guān)推薦

    Linux上Nginx獲得最佳性能的8種方法

    NGINX 是一種流行的、免費的開源 Web 服務器。默認的 NGINX 配置足以讓 Web 服務器正常工作。 但是,如果您想充分利用 NGINX
    發(fā)表于 01-16 09:51 ?519次閱讀

    Linux開發(fā)_CentOS7.4服務器搭建NFS、NGINX服務器,安裝ffmpeg、Qt環(huán)境

    在CentOS7.4服務器版本的環(huán)境下搭建NFS服務器、安裝ffmpeg、安裝nginx服務器、部署Qt編譯環(huán)境。
    的頭像 發(fā)表于 07-14 13:45 ?1488次閱讀
    Linux開發(fā)_CentOS7.4<b class='flag-5'>服務器</b>搭建NFS、<b class='flag-5'>NGINX</b><b class='flag-5'>服務器</b>,安裝ffmpeg、Qt環(huán)境

    【NanoPi2試用體驗】高級(一):基于nginx的web服務器

    /nginx reload在瀏覽中打開地址192.168.1.222:8080服務器正常!征文活動,多多捧場:https://bbs.elecfans.com/jishu_531047_1_1.html
    發(fā)表于 01-03 11:00

    NanoPi NEO - 可靠的Nginx 網(wǎng)絡服務器

    服務器部署,并刪除匿名用戶和測試數(shù)據(jù)庫。#mysql_secure_installation根據(jù)提示進行選擇:3. 安裝nginx如果你之前已經(jīng)安裝了Apache2,則需要先移除apache2
    發(fā)表于 06-20 15:43

    Nginx的安裝和啟動服務

    Mac上搭建直播服務器 Nginx+rtmp
    發(fā)表于 08-05 14:54

    Nginx服務器的搭建步驟

    ①搭建Nginx服務器②SSL加密網(wǎng)站③基于域名虛擬主機
    發(fā)表于 04-07 16:20

    構(gòu)建實戰(zhàn):Nginx+IIS構(gòu)筑Web服務器集群負載均衡

    構(gòu)建實戰(zhàn):Nginx+IIS構(gòu)筑Web服務器集群負載均衡
    發(fā)表于 09-05 10:56 ?4次下載
    構(gòu)建實戰(zhàn):<b class='flag-5'>Nginx</b>+IIS構(gòu)筑Web<b class='flag-5'>服務器</b>集群負載均衡

    一文讀懂Nginx、Apache工作原理

    在高并發(fā)連接的情況下,Nginx是Apache服務器不錯的替代品。Nginx同時也可以作為7層負載均衡服務器來使用。根據(jù)我的測試結(jié)果,Nginx
    發(fā)表于 04-26 11:33 ?2466次閱讀

    一文知道Nginx服務器的緩存原理和機制

    Nginx服務器的緩存原理,是在學習過程中比較重要的一個知識點,學習通透之后,對于自己的能力會有不小的提升——而且提升不只限于nginx一方面,技術(shù)理論一通百通,對于理解其他內(nèi)容也會有很大幫助。
    的頭像 發(fā)表于 10-05 09:01 ?2395次閱讀
    一文知道<b class='flag-5'>Nginx</b><b class='flag-5'>服務器</b>的緩存原理和機制

    怎么樣才能使用Nginx服務器配置自己的網(wǎng)站

    Nginx是一款輕量級、高性能的反向代理Web服務器,有著占有內(nèi)存小、并發(fā)能力強的特點,在網(wǎng)頁ai服務器中表現(xiàn)較好,也是很受很多網(wǎng)站的選擇使用,包括百度、騰訊、新浪、淘寶等。
    發(fā)表于 03-27 08:00 ?0次下載
    怎么樣才能使用<b class='flag-5'>Nginx</b><b class='flag-5'>服務器</b>配置自己的網(wǎng)站

    詳解Nginx高性能的HTTP和反向代理服務器

    Nginx 是一個高性能的 HTTP 和反向代理服務器,特點是占用內(nèi)存少,并發(fā)能力強,事實上 Nginx 的并發(fā)能力確實在同類型的網(wǎng)頁服務器中表現(xiàn)較好。
    的頭像 發(fā)表于 03-16 11:23 ?2355次閱讀

    【技術(shù)分享】如何在嵌入式Linux平臺上使用Nginx搭建RTMP流媒體服務器?

    RTMP作為目前主流的流媒體傳輸協(xié)議,廣泛應用于音視頻領域。那么我們?nèi)绾慰焖僭谇度胧桨遄由洗罱ㄆ鹱约旱膔tmp流媒體服務器?本篇文章將帶大家實踐一下。 ?? 概述 Nginx是一個以高效穩(wěn)定著稱
    的頭像 發(fā)表于 01-05 15:15 ?595次閱讀

    【技術(shù)分享】如何在嵌入式Linux平臺上使用Nginx搭建RTMP流媒體服務器?

    RTMP作為目前主流的流媒體傳輸協(xié)議,廣泛應用于音視頻領域。那么我們?nèi)绾慰焖僭谇度胧桨遄由洗罱ㄆ鹱约旱膔tmp流媒體服務器?本篇文章將帶大家實踐一下。概述Nginx是一個以高效穩(wěn)定著稱的高性能
    的頭像 發(fā)表于 01-13 09:27 ?1206次閱讀
    【技術(shù)分享】如何在嵌入式Linux平臺上使用<b class='flag-5'>Nginx</b>搭建RTMP流媒體<b class='flag-5'>服務器</b>?

    Nginx 如何實現(xiàn)高性能低消耗

    Nginx 是一個輕量級的HTTP 服務程序,相比其他服務器程序如Apache,Nginx占用內(nèi)存少,穩(wěn)定性高,并發(fā)處理能力強。同時Nginx
    的頭像 發(fā)表于 11-11 11:31 ?523次閱讀
    <b class='flag-5'>Nginx</b> 如何實現(xiàn)高性能低消耗

    Apache服務器Nginx服務器

    Apache和Nginx都是常見的開源Web服務器軟件,它們用于處理HTTP請求并提供網(wǎng)站和應用程序的服務。下面是對Apache和Nginx的一些基本特點的比較: 一、Apache H
    的頭像 發(fā)表于 01-22 16:48 ?473次閱讀