Nginx之HTTP过滤模块

时间:2022-11-21 22:20:59

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. 编译安装