前言(1 / 1)

慕名對Nginx源碼進行學習與研究是早在2008年的事情。當時正在為職業規劃與未來發展困惑不已,一籌莫展之際不知從哪裏得知高性能服務器是一個很有“前途”的努力方向,幾經搜索又機緣偶合地得識Lighttpd與Nginx。在逐步了解和熟悉它們的源碼後,我開始感到自己的無知與淺薄,發現原來代碼也可以寫得如此優雅。

我已編著過一本《Lighttpd源碼分析》。先解析Lighttpd源碼並沒有什麼特別的原因,隻是因為在當時Lighttpd比Nginx要火,應用得也較廣;而近幾年,憑借專注持續的更新與運作,Nginx後來居上,在全世界的應用僅次於Apache與Microsoft IIS

[]

,而且大有趕超IIS的勢頭。

Nginx提供了一個安全、快速並且靈活的Web Server 環境。與其他Web Servers相比,其主要特點是占有係統資源少、並發能力強、穩定性好,這些都是吸引網站架構人員重點關注以及對其進行廣泛應用的巨大優點。然而,對於開發工程師而言,更有吸引力的地方卻是Nginx是怎樣做到如此強勁的功能與性能的,這從因特網上存在大量的Nginx源碼分析的博客文章與論壇帖子可見一斑。

既然互聯網上已有大量的Nginx源碼分析文章,那我現在編寫這本《Nginx源碼分析》是否多此一舉?我會說不是,畢竟它較為完整地梳理了Nginx的相關核心流程。當然,這隻是我給出的答案,最終還需要各位讀者來回答。我在此闡述一下自己的看法。本書的原始素材是我在最近三四年裏地對Nginx代碼分析時斷斷續續地所做的筆記,隻不過之前寫的筆記過細地逐行注釋代碼,導致文檔中充斥大量的代碼。而在這次重新整理後,希望能從比較高一點的角度去解析Nginx,把握全局,搞清楚整體實現原理而不是陷入細節。我個人認為,隻要看清楚了Nginx整體的實現原理,對於一時半會沒有觸及到的細節,在真正遇到那個點時再去理解也是毫不費力,最多隻不過還需去查一下Man手冊,了解一下係統API而已。授人以魚不如授人以漁,為了達到這個目標,本書力爭盡量少貼代碼多畫圖,當然一些必要的代碼仍然是不可或缺的,所以讀者還是會在本書看到源代碼。雖然我的最初出發點是好的,但是在解析Nginx的某些功能時,我的確遇到了困難,特別是在解析到一大片代碼卻並沒有孰輕孰重的情況下,實在讓我很糾結,把代碼全部貼上將占去大量的版麵,會違背我少貼代碼的初衷,不貼上又怕讀者不知我所雲何物而看不懂。這不僅是因為Nginx代碼本身的耦合性較大,也在於我個人的文字描述能力有待提高,所以導致本書或多或少的各種缺點,比如囉嗦的地方、沒講到的細節等,還請各位讀者多多包涵。