天天看點

《深入剖析Nginx》——第1章 源碼分析的準備工作1.1 主要特性

本節書摘來自異步社群《深入剖析nginx》一書中的第1章,第1.1節,作者: 高群凱 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

從nginx(讀作engine x)的官方網站,我們可以看到如下介紹:nginx是igor sysoev編寫的一款http和反向代理伺服器,另外它也可以當作郵件代理伺服器。它一直被衆多流量巨大的俄羅斯網站所使用,例如yandex、mail.ru、vkontakte以及rambler等。據netcraft統計,截止到2012年8月份,世界上最繁忙的網站中有11.48%在使用nginx作為其伺服器或者代理伺服器。部分典型成功案例有:netflix、wordpress.com和fastmail.fm。鑒于nginx的強大性能與穩定性,在國内也有大量的高壓力網站在使用nginx,如新浪、網易、騰訊、csdn、酷六、水木社群、豆瓣等。

作為輕量級http服務的典型代表,nginx除了具備體積小、配置靈活、并發能力強、穩定等衆所周知的特點以外,在官方網站還詳細列出了nginx的一些主要特性,我們來詳細了解一下1。

1.http服務基本特性

處理靜态頁面請求;

處理index首頁請求;

對請求目錄進行清單顯示;

支援多程序間的負載均衡;

對打開檔案描述符進行緩存(提高性能);

對反向代理進行緩存(加速);

支援fastcgi、uwsgi、scgi和memcached多種後端伺服器;

支援gzip、ranges、chunked、xslt、ssi以及圖像縮放;

支援ssl、tls sni。

2. http服務進階特性

基于名稱的虛拟主機;

基于ip的虛拟主機;

支援keep-alive和pipelined連接配接;

靈活和友善的配置;

在更新配置和更新執行程式時提供不間斷服務;

可自定義用戶端通路的日志格式;

帶緩存的日志寫操作(提高性能);

支援快速的日志檔案切換;

支援對3xx-5xx錯誤代碼進行重定向;

uri重寫支援正規表達式;

根據用戶端位址執行不同的功能;

支援基于用戶端ip位址的通路控制;

支援基于http基本認證機制的通路控制;

支援http referer驗證;

支援http協定的put、delete、mkcol、copy以及move方法;

支援flv流和mp4流;

支援限速機制;

支援單用戶端的并發控制;

支援perl腳本嵌入。

3. 郵件代理服務特性

使用外部http認證伺服器将使用者重定向到imap/pop3伺服器;

使用外部http認證伺服器将使用者重定向到内部smtp伺服器;

支援的認證方式。

pop3:user/pass、apop、auth login/plain/cram-md5。

imap:slogin、auth login/plain/cram-md5。

smtp:auth login/plain/cram-md5。

支援ssl;

支援starttls和stls。

4. 架構和擴充性

一個主程序和多個工作程序配合服務的工作模型;

工作程序以非特權使用者運作(安全性考慮);

支援的事件機制有:kqueue(freebsd 4.1+)、epoll(linux 2.6+)、rt signals(linux 2.2.19+)、/dev/poll(solaris 7 11/99+)、event ports(solaris 10)、select和poll;

支援kqueue的衆多特性,包括ev_clear、ev_disable(臨時禁止事件)、note_lowat、ev_eof等;

支援sendfile(freebsd 3.1+、linux 2.2+、mac os x 10.5+)、sendfile64(linux 2.4.21+)和sendfilev(solaris 8 7/01+);

支援異步檔案io(freebsd 4.3+、linux 2.6.22+);

支援directio(freebsd 4.4+、linux 2.4+、solaris 2.6+、mac os x);

支援accept-filters(freebsd 4.1+、netbsd 5.0+)和tcp_defer_accept(linux 2.4+);

10000個非活躍http keep-alive連接配接僅占用約2.5mb記憶體;

最少程度的資料拷貝操作。

5. 已測試過的作業系統和平台

freebsd 3~10/i386、freebsd 5~10/amd64;

linux 2.2~3/i386、linux 2.6~3/amd64;

solaris 9/i386、sun4u、solaris 10/i386、amd64、sun4v;

aix 7.1/powerpc;

hp-ux 11.31/ia64;

mac os x/ppc、i386;

windows xp、windows server 2003。

從上面清單可以看到nginx功能的豐富與強悍。當然,這裡給出的還隻是nginx功能的簡單描述,而對于每項功能的具體使用以及是如何實作的,我們還不得而知,而這也正是本書将要展開叙述的全部内容。