Nginx 架構——【核心流程+模組介紹】
1. Nginx簡介以及特點
Nginx簡介:
Nginx (engine x) 是一個高效能的Web伺服器和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器
- 俄羅斯程式設計師Igor Sysoev於2002年開始
- Nginx是增長最快的Web伺服器,市場份額已達33.3%
- 全球使用量排名第二2011年成立商業公司
Nginx社群分支:
- Openresty作者@agentzh(章宜春)開發的,最大特點是引入了ngx_lua模組,支援使用lua開發外掛,並且集合了很多豐富的模組,以及lua庫。
- Tengine主要是淘寶團隊開發。特點是融入了因淘寶自身的一些業務帶來的新功能。
- Nginx官方版本,更新迭代比較快,並且提供免費版本和商業版本。
Nginx原始碼結構:
- 程式碼量大約11萬行C程式碼
- 原始碼目錄結構
- core (主幹和基礎設定)
- event (事件驅動模型和不同的IO複用模組)
- http (HTTP伺服器和模組)
- mail (郵件代理伺服器和模組)
- os (作業系統相關的實現)
- misc (雜項)
Nginx特點:
- 反向代理,負載均衡器
- 高可靠性、單master多worker模式
- 高可擴充套件性、高度模組化
- 非阻塞
- 事件驅動
- 低記憶體消耗
- 熱部署
- {看到文末本人總結了一一些資料!}
2. Nginx應用場景
場景如下:
- 靜態檔案伺服器
- 反向代理,負載均衡
- 安全防禦
- 智慧路由(企業級灰度測試、地圖POI一鍵切流)
- 灰度釋出
- 靜態化
- 訊息推送
- 圖片實時壓縮
- 防盜鏈
3. Nginx框架模型及流程介紹
程序元件角色:
- master程序
- 監視工作程序的狀態
- 當工作程序死掉後重啟一個新的
- 處理訊號和通知工作程序
- worker程序
- 處理客戶端請求
- 從主程序處獲得訊號做相應的事情
- cache loader程序
- 載入快取索引檔案資訊,然後退出
- cache manager程序
- 管理磁碟的快取大小,超過預定值大小後最少使用資料將被刪除
框架模型:
框架模型流程:
框架模型流程:
核心流程圖:
核心流程圖:
http請求流程:
Upstream設計:
- 訪問第三方Server伺服器
- 底層HTTP通訊非常完善
- 非同步非阻塞
- 上下游記憶體零拷貝,節省記憶體
- 支援自定義模組開發
upstream流程:
4. Nginx定製化模組開發
Nginx的模組化設計特點:
- 高度抽象的模組介面
- 模組介面非常簡單,具有很高的靈活性
- 配置模組的設計
- 核心模組介面的簡單化
- 多層次、多類別的模組設計
核心模組:
handler模組:
接受來自客戶端的請求並構建響應頭和響應體。
filter模組:
過濾(filter)模組是過濾響應頭和內容的模組,可以對回覆的頭和內容進行處理。它的處理時間在獲取回覆內容之後,向用戶傳送響應之前。
upstream模組:
使nginx跨越單機的限制,完成網路資料的接收、處理和轉發,純非同步的訪問後端服務。
load_balance:
負載均衡模組,實現特定的演算法,在眾多的後端伺服器中,選擇一個伺服器出來作為某個請求的轉發伺服器。
ngx_lua模組:
- 指令碼語言
- 記憶體開銷小
- 執行速度快
- 強大的 Lua 協程
- 非阻塞
- 業務邏輯以自然邏輯書寫
以上是個人對Nginx的一下見解,如果你對技術提升很感興趣,可以加入Java高階技術來秋秋群:856443934,裡面都是同行,有資源分享和技術進階思維導圖,其中:(分散式架構、高可擴充套件、高效能、高並 發、Jvm效能調優、Spring,MyBatis,Nginx原始碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。歡迎一到五年的工程師加入,合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
相關推薦
Nginx 架構——【核心流程+模組介紹】
開發十年,就只剩下這套架構體系了! >>>
【Activti與SpringBoot整合後相關核心Api的介紹】
使用編譯器:Eclipse(因為流程圖使用的是Eclipse的繪圖工具,所以程式碼也就直接在上面編輯,編碼Idea也是非常好用的工具,同學如果不習慣的話,可以畫完圖,複製到Idea上,編寫程式碼) 核心Api介紹: # 核心API介紹 ProcessEngine(最核心Api) &n
-01- VDMA IP的GUI配置介紹【Xilinx-VDMA模組學習】
使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2)。 在我的系統中,GUI配置圖片如下:(其實和預設配置沒有太大區別) 下面介紹VDMA IP內各個引數的配置說明。 1.Basic標籤頁 Add
Spark學習記錄(三)核心API模組介紹
spark ------------- 基於hadoop的mr,擴充套件MR模型高效使用MR模型,記憶體型叢集計算,提高app處理速度。 spark特點 ------------- 速度:在記憶體中儲存中間結果。 支援多種語言。Scala、Java、Python 內建了80+的運算元. 高階分析
大資料實時計算Spark學習筆記(4)—— Spak核心 API 模組介紹
1 Spark 介紹 1.1 Spark 特點 速度:在記憶體中儲存中間結果 支援多種語言 內建 80+ 的運算元 高階分析:MR,SQL/ Streaming/Mlib/Graph 1.2 Spark 模組 core : 通用執行
Python開發【內建模組篇】datetime
獲取當前日期和時間 1 >>> from datetime import datetime 2 >>> now = datetime.now() 3 >>> now 4 datetime.datetime(2018, 12,
Python開發【內建模組篇】collections
namedtuple namedtuple是一個函式,它用來建立一個自定義的tuple物件,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。 這樣一來,我們用namedtuple可以很方便地定義一種資料型別,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便。
Python開發【內建模組篇】configparser
生成配置檔案 import configparser config = configparser.ConfigParser() config["DEFAULT"] = {'ServerAliveInterval': '45', 'Com
Python開發【內建模組篇】日誌模組
logging配置 1 import logging 2 logging.basicConfig(level=logging.WARNING, 3 format='%(asctime)s %(filename)s[line:%(line
Python開發【內建模組篇】os模組
1.當前路徑及路徑下的檔案 os.getcwd():檢視當前所在路徑。 >>> import os >>> os.getcwd() 'E:\\test' >>> os.listdir(path):列舉目錄下的所有檔案。返回的是列表型別
【unity系統模組開發】Unity5.5.2UI打包AssetBundle
之前已經有幾篇文章寫打包AssetBundle,但畢竟沒有實際在專案中寫過都寫的比較淺。 剛好最近專案更新Unity5.5.2就順便由我來更新ui打包流程 這裡就把這次的經驗寫一下 這裡還是稍微解釋一下打包的基本目的: 打包ui就是把你做的介面打包出來成assetbund
【Node網路模組NET】
環境:Node v8.2.1; Npm v5.3.0; OS Windows10 net 模組提供了建立基於流的 TCP 或 IPC 伺服器(net.createServer())和客戶端(net.createConnection()) 的非同步網路 API。
QML實現可定製模態對話方塊【核心部分詳解】
轉自 http://blog.csdn.net/r5014/article/details/70139689
《大型網站技術架構:核心原理與案例分析》【PDF】下載
優化 均衡 1.7 3.3 架設 框架 應用服務器 博客 分布式服務框架 《大型網站技術架構:核心原理與案例分析》【PDF】下載鏈接: https://u253469.pipipan.com/fs/253469-230062557 內容簡介 本書通過梳理大型網站技
【Keras入門日誌(2】 Keras裡的模組介紹
【時間】2018.10.30 【Keras入門日誌(2】 Keras裡的模組介紹 目錄 概述 一、Keras中的模組 keras模組思維導圖 1.1 Optimizers 1.2 Objectives 1.3 Act
Vue架構【基礎篇-第02章】:介紹
介紹 一、Vue.js是什麼 Vue是一套用於構建使用者介面的漸進式框架。與其他大型框架不同的是,Vue被設計為可以自底向上逐層應用。Vue的核心庫只關注檢視層,不僅易於上手,還便於與第三方庫或既有專案整合。另一方面,當與現代化的工具鏈以及各種支援類庫結合使用時,Vue也完全能夠為複雜的單頁應用提供驅動。
python—threading.Semaphore和BoundedSemaphore【threading模組介紹04】
https://blog.csdn.net/a349458532/article/details/51589460 一、Semaphore物件 1. 基本介紹 Semaphore 是最古老的同步原語之一,由荷蘭電腦科學家 Edsger W. Dijkstra 發明。(他最早使用名為 P()
基於spring boot和mongodb打造一套完整的許可權架構(五)【整合使用者模組、選單模組、角色模組】
在第四章我們已經實現了對security的整合,我們已經實現了登陸到我們的系統中了,但是大家會發現我們登陸成功以後並沒有顯示左側的選單節點,本章我們將開始整合使用者模組、選單模組以及角色模組。 1、首先我們需要在sys的entity目錄底下建立Tree、
【ZYNQ_LINUX】如何把自己的驅動編譯進核心或模組(Kconfig和Makefile
linux驅動編寫(Kconfig檔案和Makefile檔案) feixiaoxing 2013年09月08日 17:12 5502 【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在linux編寫驅動的過程中,有兩個檔案是我們必須
【OpenCV】3.4.0影象拼接Stitching模組介紹
Images stitching 是opencv3.4.0中的模組之一,使用此模組可以實現對影象的拼接。在此之前需要編譯opencv3.4.0+contrib。具體編譯方法可以點此連結。也可以直接