Nginx之HTTP過濾模塊


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 過濾模塊開發步驟

  1. 確定源代碼文件名稱
  2. 創建 config 文件,HTTP_MODULES 改為 HTTP_FILTER_MODULES 變量,多個源代碼文件實現 1 個 HTTP 過濾模塊時,需在 NGX_ADDON_SRCS 變量中添加其他源代碼文件
  3. 定義過濾模塊
  4. 處理感興趣的配置項
  5. 實現初始化方法:初始化方法就是把模塊中處理HTTP頭部的ngx_http_output_header_filter_pt方法與處理HTTP包體的ngx_http_output_body_filter_pt方法插入到過濾模塊鏈表的首部。
  6. 實現處理 HTTP 頭部的方法:實現 ngx_http_ouput_header_filter_pt 原型的方法,用於處理 HTTP 頭部
  7. 實現處理 HTTP 包體的方法:實現 ngx_http_ouput_body_filter_pt 原型的方法,用於處理 HTTP 包體
  8. 編譯安裝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM