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上查詢。