1. 创建模块源码文件:
// my_module.c
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
static ngx_int_t ngx_http_my_handler(ngx_http_request_t *r);
static ngx_command_t ngx_http_my_commands[] = {
{ ngx_string("my_directive"),
NGX_HTTP_LOC_CONF | NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_my_module_conf_t, enable),
NULL },
ngx_null_command
};
static ngx_http_module_t ngx_http_my_module_ctx = {
NULL, /* preconfiguration */
NULL, /* postconfiguration */
NULL, /* create main configuration */
NULL, /* init main configuration */
NULL, /* create server configuration */
NULL, /* merge server configuration */
NULL, /* create location configuration */
NULL /* merge location configuration */
};
ngx_module_t ngx_http_my_module = {
NGX_MODULE_V1,
&ngx_http_my_module_ctx, /* module context */
ngx_http_my_commands, /* module directives */
NGX_HTTP_MODULE, /* module type */
NULL, /* init master */
NULL, /* init module */
NULL, /* init process */
NULL, /* init thread */
NULL, /* exit thread */
NULL, /* exit process */
NULL, /* exit master */
NGX_MODULE_V1_PADDING
};
static ngx_int_t ngx_http_my_handler(ngx_http_request_t *r) {
// 处理请求的逻辑
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "My module handler executed");
return NGX_DECLINED;
}
2. 修改 nginx.conf 配置文件:
# nginx.conf
http {
# ...
server {
listen 80;
server_name localhost;
location / {
my_directive on; # 启用模块处理
my_module;
}
}
# ...
}
在 location / 部分,我们启用了模块处理(通过 my_directive 指令),并将模块 my_module 挂载到这个 location。
3. 编译并运行 Nginx:
编译 Nginx 时,需要将 my_module.c 加入到编译选项中,然后启动 Nginx。
./configure --add-module=/path/to/your/module
make
sudo make install
sudo nginx
4. 测试:
访问 http://localhost/,在 Nginx 的错误日志中应该会看到类似 "My module handler executed" 的日志输出,表明你的模块处理函数被成功执行。
请根据你的具体需求和场景进行调整。这只是一个简单的例子,实际情况中可能涉及更多的配置和处理逻辑。
转载请注明出处:http://www.zyzy.cn/article/detail/10146/Nginx