天天看點

一深入了解Nginx的 子產品化 ,全局觀Nginx源碼目錄結構Nginx子產品的類型配置子產品的設計Nginx子產品的加載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以後版本才有的。
    └── 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的 子產品化 ,全局觀Nginx源碼目錄結構Nginx子產品的類型配置子產品的設計Nginx子產品的加載Nginx子產品的主要輪廓

配置子產品是所有 子產品的基礎,它實作了最基本的配置項 的解析功能(也就是解析 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啟動時架構的處理流程
    一深入了解Nginx的 子產品化 ,全局觀Nginx源碼目錄結構Nginx子產品的類型配置子產品的設計Nginx子產品的加載Nginx子產品的主要輪廓
    建議對比這篇部落格一起看Ngnix 的代碼分析

Nginx子產品的主要輪廓

一深入了解Nginx的 子產品化 ,全局觀Nginx源碼目錄結構Nginx子產品的類型配置子產品的設計Nginx子產品的加載Nginx子產品的主要輪廓

繼續閱讀