一深入理解Nginx的 模組化 ,全域性觀
Nginx原始碼目錄結構
.
├── auto 自動檢測系統環境以及編譯相關的指令碼
│ ├── cc 關於編譯器相關的編譯選項的檢測指令碼
│ ├── lib nginx編譯所需要的一些庫的檢測指令碼
│ ├── os 與平臺相關的一些系統引數與系統呼叫相關的檢測
│ └── types 與資料型別相關的一些輔助指令碼
├── conf 存放預設配置檔案,在make install後,會拷貝到安裝目錄中去
├── contrib 存放一些實用工具,如geo配置生成工具(geo2nginx.pl)
├── html 存放預設的網頁檔案,在make install後,會拷貝到安裝目錄中去
├── man nginx的man手冊
└── src 存放nginx的原始碼
├── core nginx的核心原始碼,包括常用資料結構的定義,以及nginx初始化執行的核心程式碼如main函式
├── event 對系統事件處理機制的封裝,以及定時器的實現相關程式碼
│ └── modules 不同事件處理方式的模組化,如select、poll、epoll、kqueue等
├── http nginx作為http伺服器相關的程式碼
│ └── modules 包含http的各種功能模組
├── mail nginx作為郵件代理伺服器相關的程式碼
├── misc 一些輔助程式碼,測試c++頭的相容性,以及對google_perftools的支援
|—— stream nginx支援傳輸層的 協議:如TCP、UDP協議,UNINX域socket。這個模組是在nginx1.9以後版本才有的。
└── os 主要是對各種不同體系統結構所提供的系統函式的封裝,對外提供統一的系統呼叫介面。
Nginx模組的型別
關於這個分類,大家各說風雲:
- 1.
event module:
搭建 獨立於作業系統的事件處理機制的框架,以及 提供各種具體事件的處理。包括ngx_events_module,ngx_event_core_module,ngx_epoll_module
等。nginx 具體 使用何種事件處理 模組,這 很大依賴具體的作業系統和編譯選項。 - 2.
phase handler:
此型別模組也被直接稱為handler
模組,主要負責處理客戶端請求併產生待響應的內容,比如ngx_http_static_moduler
模組,負責客戶端的靜態頁面請求處理並將對應的磁碟 檔案準備為響應內容輸出。 - 3.
output filter:
也稱為filter
模組,主要 負責處理輸出的內容,包括修改輸出內容,可以實現對輸出的所有的 html的 頁面新增 預定義的footbar一類的工作,或者對輸出的 圖片的URL進行替換的 工作。 - 4.
upstream:
upstream模組實現反向代理,將真正的請求 轉發到伺服器上,並 從後端伺服器上讀取響應,發回客戶端。upstream
模組 是一種特殊的handler
,只不過響應內容也不是真正由自己產生的,而是從後端伺服器上讀取的。 - 5.
load-balancer:
負載均衡模組,實現特定的 演算法,在 眾多的後端 伺服器中,選擇一個伺服器出來作為某個請求的轉發伺服器。
配置模組的設計
配置模組是所有 模組的基礎,它實現了最基本的配置項 的解析功能(也就是解析 nginx.conf)
核心模組的型別是ngx_core_module
核心 模組的定義
typedef struct {
ngx_str_t name; //核心模組名稱
void *(*create_conf)(ngx_cycle_t *cycle); //解析配置項前,Nginx框架會呼叫create_conf方法
char *(*init_conf)(ngx_cycle_t *cycle, void *conf); //解析配置項後,Nginx框架會呼叫init_conf方法
} ngx_core_module_t;
Nginx模組的載入
- 1.Nginx模組 是 被編譯進入Nginx,並不像Apache那樣去編譯一個so檔案,在配置裡面指定是否載入。
- 2.解析配置檔案時,Nginx的各個模組都有機會去接手處理某個請求,但是URL請求的模組只能有一個 。
- 3.Nginx啟動時框架的處理流程
建議對比這篇部落格一起看Ngnix 的程式碼分析
Nginx模組的主要輪廓
相關推薦
一深入理解Nginx的 模組化 ,全域性觀
Nginx原始碼目錄結構 . ├── auto 自動檢測系統環境以及編譯相關的指令碼 │ ├── cc 關於編譯器相關的編譯選項的檢測指令碼 │ ├
《深入理解NGINX 模組開發與架構解析》之摘抄學習
1.基於Nginx框架開發程式有5個優勢: (1).Nginx將網路、磁碟及定時器等非同步事件的驅動都做了非常好的封裝,基於它開發將可以忽略這些事件處理的細節; (2).Nginx封裝了許多平臺無關的介面、容器,適用於跨平臺開發。
推薦我的新書《深入理解Nginx:模組開發與架構解析》
.2.1 執行中的nginx程序間的關係 / 28 2.2 nginx配置的通用語法 / 31 2.2.1 塊配置項 / 31 2.2.2 配置項的語法格式 / 32 2.2.3 配置項的註釋 / 33 2.2.4 配置項的單位 / 33 2.2.5 在配置中使用變數 / 33 2.3 ngin
《深入理解Nginx 模組開發與架構解析》筆記之epoll事件模組
epoll Linux epoll Linux epoll工作模式 水平觸發LT 邊緣觸發ET 前者是預設的,可以處理阻塞和非阻塞套接字,後者只能處理非阻塞套接字。 Linux epoll原理 如上
深入理解Nginx 模組開發與架構解析-陶輝 讀書筆記
前言 1. nginx是一個優秀的事件驅動框架,nginx非常適合開發在傳輸層以TCP對外提供服務的伺服器程式。基於nginx框架開發程式有5個優勢: * nginx將網路、磁碟及定時器等非同步事件的驅動都做了非常好的封裝,基於它開發將可以忽略這些事情處理的細節 * ng
深入理解JavaScript模組化程式設計:RequireJS
1、開篇的話 之前寫過一篇JavaScript模組化程式設計,當時是結合自己做的東西來寫的,比著葫蘆畫瓢。現在回過頭來看,依然有些不是太理解的地方,現在重新寫個小例子,加深自己的理解。JavaScript模組化概念及重要性以及RequireJS的好處就不介紹了
三:深入理解Nginx的模組化 (結合原始碼詳解)
盜用前面用到的流程圖 第二步實際上是呼叫 ngx_add_inherited_sockets() //檔名: Nginx.c int ngx_cdecl main(int argc,
深入理解Nginx:模組開發與架構解析
讀書筆記 第一部分 Nginx能幫我們做什麼 第1章 研究Nginx前的準備工作 1.1Nginx是什麼 1.2
前端模組化,元件和,工程化的理解
前端工程化 前端工程化我認為就是將前端專案當成一項系統工程進行分析、組織和構建從而達到項 目結構清晰、分工明確、團隊配合默契、開發效率提高的目的。 工程化是一種思想而不是某種技術(當然為了實現工程化我們會用一些技術) 在一個大型web專案中往往有更加複雜的結構和非常多的頁面需要很多人甚至
《深入理解Nginx》閱讀與實踐(一):Nginx安裝配置與HelloWorld
#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static char* ngx_http_mytest(ngx_conf_t *cf,ngx_command_t *cmd,
深入理解Nginx:模組開發與架構解析 讀書筆記
Nginx的作用 當我們在設計高效能web伺服器的時候,我們第一選擇是使用Nginx,因為nginx對伺服器效能上的挖掘已經到了非常高的水平,Nginx採用了無阻塞分階段的事件驅動框架。當nginx不能那個完全實現我們的業務需求的時候,我們可以在Nginx後端搭建一個非ng
效能測試:深入理解執行緒數,併發量,TPS,看這一篇就夠了
併發數,執行緒數,吞吐量,每秒事務數(TPS)都是效能測試領域非常關鍵的資料和指標。 那麼他們之間究竟是怎樣的一個對應關係和內在聯絡? 測試時,我們經常容易將執行緒數等同於表述為併發數,這一表述正確嗎? 本文就將對效能領域的這些關鍵概念做一次探討。 文章可能會比較長,希望您保持耐心看完。 1.
七天學會ASP.NET MVC (一)——深入理解ASP.NET MVC
button點擊 工具 建行 嘗試 studio 深入 matching 學會 場景 ASP.NET vs MVC vs WebForms 許多ASP.NET開發人員開始接觸MVC認為MVC與ASP.NET完全沒有關系,是一個全新的Web開發,事實上ASP.NET是創建WE
轉載:2.2.3 配置項的註釋《深入理解Nginx》(陶輝)
href 深入 logs class tps 註釋 配置 blog bsp 原文:https://book.2cto.com/201304/19628.html如果有一個配置項暫時需要註釋掉,那麽可以加“#”註釋掉這一行配置。例如:#pid logs/ngi
轉載:2.2.5 在配置中使用變量《深入理解Nginx》(陶輝)
依賴 con com 關註 部分 自己 core stat sent 原文:https://book.2cto.com/201304/19630.html 有些模塊允許在配置項中使用變量,如在日誌記錄部分,具體示例如下。log_format main ‘$r
深入理解並發/並行,阻塞/非阻塞,同步/異步【轉】
非阻塞 n) 做的 耗時 非阻塞socket 衣服 時間片輪轉 輪轉 理解 1、阻塞,非阻塞 首先,阻塞這個詞來自操作系統的線程/進程的狀態模型中,如下圖: 一個線程/進程經歷的5個狀態,創建,就緒,運行,阻塞,終止。各個狀態的轉換條件如上圖,其中有個阻塞狀態,就是
深入理解java虛擬機,類加載
深入理解java nal ava 直接 成員 進制 地址 lang 變量賦值 1,通過使用靜態字段,只有真正定義這個字段的類才會被初始化,(子類不初始化,父類初始化 2,new數組,不初始化 3,通過類來調用一些類的常量,可以不初始化類,(常量在編譯期,被優化到NotIni
深入理解並發/並行,阻塞/非阻塞,同步/異步
text 只有一個 ima UNC 不同 比較 callback 調度 狀態 首先,阻塞這個詞來自操作系統的線程/進程的狀態模型中,如下圖 : 一個線程/進程經歷的5個狀態,創建,就緒,運行,阻塞,終止。各個狀態的轉換條件如上圖,其中有個阻塞狀態,就是說當線程中調用某個函
深入理解spark-taskScheduler,schedulerBackend源碼分析
cluster create for available 常用 scala ini div row 上次分析了dagshceduler是如何將任務拆分成job,stage,task的,但是拆分後的僅僅是一個邏輯結果,保存為一個resultstage對象,並沒執行;
url模組化,include函式的使用
urls的模組化 當我們的專案越做越大時,那麼url就會變得越來越多,如果都放在主’urls.py‘檔案中,那麼將不太好管理,因此我們可以將每個app自己的urls放到自己的app中進行管理。一般我們會在app中新建一個urls.py檔案用來儲存所有和這個app相關的子url。(檔名可以