1. HTTP 過濾模塊
ngx_http_not_modified_module
僅對 HTTP 頭部做處理。在返回 200 成功時,根據請求中 If-Modified-Since 或者 If-Unmodified-Since 頭部取得瀏覽器緩存文件的時間,再分析返回用戶文件的最后修改時間,以此決定是否直接發送 304 Not Modified 響應給用戶。
ngx_http_range_body_filter_module
處理請求中 Range 信息,根據 Rrange 中的要求返回文件的一部分給用戶
ngx_http_copy_filter_module
僅對HTTP包體做處理。將用戶發送的 ngx_chain_t 結構的 HTTP 包體復制到新的 ngx_chain_t 結構中(都是各種指針的復制,不包括實際 HTTP 響應內容),后續的 HTTP 過濾模塊處理的 ngx_chain_t 類型的成員都是 ngx_http_copy_filter_module 模塊處理后的變量。
ngx_http_headers_filter_module
僅對 HTTP 頭部做處理。允許通過修改 nginx.conf 配置文件,在返回給用戶的響應中添加任意的 HTTP 頭部。
ngx_http_userid_filter_module
僅對 HTTP 頭部做處理。這就是執行 configure 命令時得到的 http_userid_module 模塊,它基於 cookie 提供了簡單的認證管理功能。
ngx_http_charset_filter_module
可以將文本類型返回給用戶的響應包,按照 nginx.conf 中的配置重新進行編碼,再返回給用戶
ngx_http_ssi_filter_module
支持 SSI(Server Side Include,服務器端嵌入)功能,將文件內容包含到網頁中並返回給用戶
ngx_http_postpone_filter_module
僅對 HTTP 包體做處理。它僅應用於 subrequest 產生的子請求。它使得多個子請求同時向客戶端發送響應時能夠有序,所謂的"有序"是指按照構造子請求的順序發送響應。
ngx_http_gzip_filter_module
對特定的 HTTP 響應包體(如網頁或者文本文件)進行gzip壓縮,再把壓縮后的內容返回給用戶
ngx_http_range_header_filter_module
支持range協議
ngx_chunked_filter_module
支持 chunk 編碼
ngx_http_header_filter_module
僅對 HTTP 頭部做處理。該過濾模塊將會把 r->headers_out 結構體中的成員序列化為返回給用戶的 HTTP 響應字節流,包括響應行(如 HTTP/1.1 200 OK)和響應頭部,並通過調用 ngx_http_write_filter_module 過濾模塊中的過濾方法直接將 HTTP 包頭發送到客戶端
ngx_http_write_filter_module
僅對 HTTP 包體做處理。該模塊負責向客戶端發送 HTTP 響應
2. HTTP 過濾模塊開發步驟
- 確定源代碼文件名稱
- 創建 config 文件,HTTP_MODULES 改為 HTTP_FILTER_MODULES 變量,多個源代碼文件實現 1 個 HTTP 過濾模塊時,需在 NGX_ADDON_SRCS 變量中添加其他源代碼文件
- 定義過濾模塊
- 處理感興趣的配置項
- 實現初始化方法:初始化方法就是把模塊中處理HTTP頭部的ngx_http_output_header_filter_pt方法與處理HTTP包體的ngx_http_output_body_filter_pt方法插入到過濾模塊鏈表的首部。
- 實現處理 HTTP 頭部的方法:實現 ngx_http_ouput_header_filter_pt 原型的方法,用於處理 HTTP 頭部
- 實現處理 HTTP 包體的方法:實現 ngx_http_ouput_body_filter_pt 原型的方法,用於處理 HTTP 包體
- 編譯安裝