Handler模块负责生成响应内容,Filter模块负责对响应进行二次加工;Handler决定返回什么,每个location最多一个,直接操作请求结构体;Filter不产生内容,仅链式处理响应头或体,可叠加多个。
Handler 模块负责“怎么响应”,Filter 模块负责“怎么加工响应”。这是理解 Nginx 模块分工最直接的切入点。
它接到请求后,决定返回什么内容——可能是读一个文件、调用后端服务、拼一段字符串,或者直接返回 404。整个过程发生在请求处理流程的早期阶段(如 NGX_HTTP_CONTENT_PHASE),且通常只有一个 Handler 参与最终响应生成。
ngx_http_static_module 处理静态文件,ngx_http_proxy_module 转发请求ngx_http_request_t*),可修改响应头、设置状态码、写入响应体ngx_http_finalize_request,后续 Handler 就不再执行它不产生原始内容,只在 Handler 输出之后介入,对已生成的响应头或响应体做二次处理。多个 Filter 可按顺序叠加,形成链式加工流程。
r->headers_out(如添加 X-Frame-Options);Body Filter 处理输出缓冲区(如 gzip 压缩、HTML 插入脚本)ngx_http_top_header_filter 和 ngx_http_top_body_filter),由 Nginx 自动串接调用Handler 通常通过 location 块中的指令触发(如 proxy_pass、root),而 Filter 多数是全局启用或按条件启用,不依赖 location 绑定。
location /api { proxy_pass http://backend; } 激活 proxy handlergzip on; 或 add_header X-Powered-By "Nginx";,它们自动插入到 filter 链中一次请求的完整路径是:客户端 → Nginx 核心 → 匹配 location → 调用 Handler 生成初始响应 → 依次经过各 Header Filter → 再经各 Body Filter 加工 → 发送给客户端。