在前一篇文章(nginx初探)中,我們已經介紹了nginx的基本功能,并講解了在windows環境下的安裝和簡單實現負載均衡。接下來,我們將深入了解nginx的源碼結構。
未經編譯的nginx源碼src目錄結構如下:
環境:nginx-1.8.0 + centos 7.0(可以使用yum install tree命令安裝tree工具,以便顯示文件的樹形結構),結果如下:
從上面的源碼中可以看出,共有10個目錄和265個文件。Nginx的主要模塊包括Core、Event、http、mail、misc(雜項,包含多種功能)和os等幾個部分。通過源代碼的命名,我們可以大致猜測出其所代表的功能。
建議大家下載源碼并大致瀏覽一下,這樣可以更好的理解Nginx的功能組成。
舉個簡單的例子,Core模塊下的第一個文件nginx.c的一部分代碼如下:
從上述代碼可以看出,ngx_core_commands[]數組定義了Core模塊下使用的所有設置命令(這也是在后續學習Core模塊時需要介紹的內容)。
此外,event-modules目錄下明確列出了幾種事件模型,這些也是在學習該模塊時需要了解的地方。由于對shell腳本語言和c語言的掌握有限,我們不會對源碼進行過多的解釋。
如果使用CentOS進行源碼編譯,需要先下載一些基礎軟件,可以使用以下命令進行下載:
- 為了支持rewrite功能,我們需要安裝pcre:
2. 安裝openssl:
如果需要ssl支持,請執行以下命令。如果不需要SSL支持,請跳過這一步:
3. gzip類庫安裝:
(注:如果使用Ubuntu,直接使用命令sudo apt-get install nginx進行下載即可)
- 準備好源碼后,進行解壓:tar -zxvf nginx-1.8.0.tar.gz 5. 編譯和安裝,執行以下命令:
–with-http_stub_status_module:支持nginx狀態查詢 –with-http_ssl_module:支持https –with-http_spdy_module:支持Google的spdy(需要SSL支持,想了解請百度spdy) –with-pcre:為了支持rewrite重寫功能,必須指定pcre
(如果提示需要安裝其他包,請按提示安裝)
設置完成后,執行make,然后執行make install
啟動命令位于/usr/local/nginx-1.8.0/sbin目錄下:
(如果在Ubuntu上,可能位于/usr/sbin目錄下)
分析編譯后的文件:/usr/local/nginx-1.8.0目錄下包含編譯后生成的配置等文件:
在conf目錄下有幾個配置文件,這些配置文件用于控制Nginx服務器的基本功能,其中nginx.conf的內容如下:
從上面的內容可以看出,每個配置屬性的含義大致可以理解,這些將在后續的分模塊學習中詳細說明。
同樣地,編譯后會在原始的Nginx代碼包中生成一個objs目錄,其中生成的ngx_modules.c文件中重新集中聲明了nginx配置的所有模塊(使用extern關鍵字),這些模塊可以通過編譯前的configure命令進行配置,即設置哪些模塊需要編譯,哪些不需要編譯。如下圖所示,包含了執行編譯過程中的內容:
這些模塊均在此處使用extern進行聲明,以表明其他模塊可以訪問,而對其本身的定義和初始化ngx_module_t結構在其對應的.c文件中進行。例如,ngx_core_module模塊便是在./src/core/nginx.c文件中定義并進行靜態初始化。實際上,ngx_core_module是一個全局的結構體對象,其他模塊類似。如下圖所示:
版權聲明
Java后端技術推送的文章為本人原創、網上收集或其他作者投稿。對于網上收集的部分,除非確實無法確認,我們都會注明作者和來源。部分文章推送時未能與原作者取得聯系。若涉及版權問題,請原作者聯系我們,我們將在24小時內刪除處理,謝謝!^_^ qq:1573876303。