nginx handler模块是content阶段直接生成响应的c模块,用于状态页、调试接口等;含配置结构体、指令表、模块上下文和handler函数四部分;需在nginx源码中集成编译,并通过location配置启用。

写一个 Nginx Handler 模块,本质是让 Nginx 在 content 阶段直接生成响应,不查文件、不转发请求,而是用 C 代码“当场输出”。它适合做状态页、调试接口、轻量 JSON 服务等场景。
准备模块骨架:四个关键部分
每个 Handler 模块都包含以下结构:
-
配置结构体:比如
ngx_http_hello_loc_conf_t,用于存 location 级配置(如是否启用、自定义字符串) -
指令定义表:声明配置指令(如
hello_string、hello_counter on),并绑定解析函数 -
模块上下文:类型为
ngx_http_module_t,其中handler字段必须指向你的处理函数 -
Handler 函数:类型为
ngx_http_handler_pt,负责设置状态码、响应头、构造响应体并发送
编写核心处理函数
这个函数是模块的“心脏”,需完成三件事:写响应头、分配缓冲区、调用输出接口。例如:
- 设置
r->headers_out.status = NGX_HTTP_OK和content_type - 用
ngx_create_temp_buf(r->pool, len)分配内存,把内容拷进去 - 调用
ngx_http_send_header(r)发头,再用ngx_http_output_filter(r, &out)发体 - 返回
NGX_OK表示成功;返回NGX_DECLINED表示不处理,交由其他 handler(如 static 模块)
配置与编译:两步落地
模块不能独立编译,必须集成进 Nginx 源码:
- 在模块目录下写
config文件,指定源码路径和模块名,例如:ngx_addon_name=ngx_http_hello_moduleHTTP_MODULES="$HTTP_MODULES ngx_http_hello_module"NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_module.c" - 进入 Nginx 源码根目录,运行:
./configure --add-module=/path/to/your/module --prefix=/usr/local/nginxmake && sudo make install
配置启用与验证
安装完成后,在 nginx.conf 中添加 location 并启用指令:
- 例如:
location /hello {<br> hello_string "Hi from Nginx";<br> hello_counter on;<br>} - 启动 Nginx:
sudo /usr/local/nginx/sbin/nginx - 访问
http://localhost/hello,应直接返回设定文本,且响应头中Content-Length正确、无重定向或 404
13万字C语言保姆级教程(深入):立即使用
在学习笔记中,你将探索c语言的核心概念和高级技巧!











