1. 程式人生 > >Nginx伺服器-伺服器架構初探

Nginx伺服器-伺服器架構初探

1.Nginx的模組化結構簡介

     Nginx涉及到的模組分為核心模組,標準HTTP模組,可選HTTP模組,郵件服務模組以及第三方模組等五大類。核心模組是指Nginx伺服器正常執行必不可少的模組,它們提供了Nginx最基本最核心的服務,如程序管理、許可權控制、錯誤日誌記錄等;標準HTTP模組是通過快速編譯Nginx後包含的模組,其支援Nginx伺服器的標準HTTP功能;可選HTTP模組主要用於擴充套件標準的HTTP功能,使其能夠處理一些特殊的HTTP請求;郵件服務模組主要用於支援Nginx的郵件服務;第三方模組是為了擴充套件Nginx伺服器應用,完成特殊功能而由第三方機構或者個人編寫的可編譯到Nginx的模組。Nginx的每個模組都基本符合單一職責原則,在具體環境中可以根據實際情況裁剪和加入。

2. Nginx模組詳細介紹

2.1 核心模組

       Nginx安裝目錄下的objs中,開啟ngx_modules.c檔案,其中核心模組如下圖:


      詳細來說,核心模組主要包含對兩類功能的支援,一類是主體功能,包括程序管理、許可權控制、錯誤日誌記錄、配置解析等,另一類是用於響應請求事件必需的功能,包括事件驅動機制、正則表示式解析等;

2.2 標準HTTP模組

      標準HTTP模組指的是基本HTTP服務。這些模組在預設情況下是被編譯到Nginx中的,除非在配置時新增--without-XXX引數宣告不編譯。常用的標準HTTP模組如下表所示:

模組功能
ngx_http_core配置埠、URI分析、伺服器響應錯誤處理、別名控制以及其他HTTP核心事務
ngx_http_access_module基於IP地址的訪問控制(允許/拒絕)
ngx_http_auth_basic_module基於HTTP的身份認證
ngx_http_autoindex_module處理以"/"結尾的請求並自動生成目錄列表
ngx_http_browser_module解析HTTP請求頭中的“User-Agent”域的值
ngx_http_charset_module指定網頁編碼
ngx_http_empty_gif_module從記憶體建立一個1x1的透明gif圖片,可以快速呼叫
ngx_http_fastcgi_module對FastCGI的支援
ngx_http_geo_module將客戶端請求中的引數轉化為鍵值對變數
ngx_http_gzip_module壓縮請求響應,可以減少資料傳輸
ngx_http_headers_filter_module設定HTTP響應頭
ngx_http_index_module

c處理以“/”結尾的請求,如果沒有找到該目錄下的index頁,就將請求轉給

ngx_http_autoindex_module模組處理;如果Nginx伺服器開啟了

ngx_http_random_index_module模組,則隨機選擇index頁

ngx_http_limit_req_module限制來自客戶端的請求的響應和處理速率
ngx_http_limit_conn_module限制來自客戶端的連線響應和處理速率
ngx_http_log_module自定義access日誌
ngx_http_map_module建立任意鍵值對變數
ngx_http_memcached_module對Memcached的支援
ngx_http_proxy_module支援代理服務
ngx_http_referer_module過濾HTTP頭中“Referer”域值為空的HTTP請求
ngx_http_rewrite_module通過正則表示式重定向請求
ngx_http_scgi_module對SCGI的支援
ngx_http_ssl_module對HTTPS的支援
ngx_http_upstream_module

定義一組伺服器,可以接受來自代理、Fastcgi、Memcached的重定向,

主要用於負載均衡

2.3 可選HTTP模組

       可選HTTP模組在目前的Nginx發行版本中只提供原始碼,但在快捷編譯時預設不編譯。如果想使用相應模組,就必須在配置時使用--with-XXX引數說明,下表中整理常用的可選HTTP模組:

模組功能
ngx_http_addition_modules在響應請求的頁面開始或者結尾新增文字資訊
ngx_http_degradation_module在低記憶體的情形下允許Nginx伺服器返回444錯誤或者204錯誤
ngx_http_perl_module在Nginx的配置檔案中可以使用Perl指令碼
ngx_http_flv_module

支援將Flash多媒體資訊按照流檔案傳輸,可以根據客戶端指定的開始位

置返回Flash

ngx_http_geoip_module支援解析基於GeoIP資料庫的客戶端請求
ngx_google_perftools_modules

支援Google Performance Tools(Google公司開發的一套用於C++ Profile的工具

集)

ngx_http_gzip_module支援線上實時壓縮響應客戶端的輸出資料流
ngx_http_gzip_static_module搜尋並使用預壓縮的以“.gz”為字尾名的檔案代替一般檔案響應客戶端請求
ngx_http_image_filter_module支援改變JPEG、GIF和PNG圖片的尺寸和旋轉方向
ngx_http_mp4_module

支援將H.264/AAC編碼的多媒體資訊(字尾名通常為.mp4,m4v或m4a)按

照流檔案傳輸,常與ngx_http_index_module模組一起使用

ngx_http_random_index_module

Nginx接收到以“/”結尾的請求時,在對應的目錄下隨機選擇一個檔案作為index文

件。

ngx_http_secure_link_module支援對請求連結的有效性檢查
ngx_http_ssl_module對HTTP/SSL的支援
ngx_http_stub_status_module

支援返回Nginx伺服器的統計資訊,一般包括處理連線的數量、連

接成功的數量、處理的請求數、讀取和返回的Header資訊數等資訊

ngx_http_sub_module使用指定的字串替換響應資訊中的資訊
ngx_http_dav_module支援HTTP協議和WebDAV協議中PUT、DELETE、MKCOL、COPY和MOVE方法
ngx_http_xslt_module將XML響應資訊使用XSLT(擴充套件樣式轉換語言)進行轉換

2.4 郵件服務模組

       郵件服務是Nginx伺服器提供的主要服務之一,但是當前版本快速編譯時預設不會編譯郵件服務模組,和Nginx伺服器提供的郵件服務相關的模組有:

ngx_mail_core_module

ngx_mail_pop3_module

ngx_mail_imap_module

ngx_mail_smtp_module

ngx_mail_auth_http_module

ngx_mail_proxy_module

ngx_mail_ssl_module

    這些模組完成了郵件服務的主要功能,包括對POP3協議、IMAP協議和SMTP協議的支援,對身份認證、郵件代理和SSL安全服務的提供。

2.5 第三方模組

      由於Nginx支援自定義程式設計模組,第三方模組不斷得到擴充,功能也非常豐富。大家可以根據自己的需要在wiki上查詢。