Nginx 模块开发

本文介绍了Nginx模块开发的背景知识,包括http初始化流程、状态机和请求处理流程。重点讲解了handler、filter和upstream模块的开发,涉及配置指令结构、上下文写法。同时提到了C/C++后台开发的学习资源。
摘要由CSDN通过智能技术生成

一、在了解Nginx模块开发前,首先得知道在Nginx中http初始化流程、11个状态机、http请求具体流程。

(1)conf文件加载

  对conf文件内容进行初始化,在命令行执行nginx -c ./conf/nginx.conf的之后,开始解析conf文件,启动http模块(入口:ngx_http_block)。

(2)状态机初始化

  ngx_http_init_phase_handlers,保存状态机每个阶段需要处理的handler。

(3)tcp server启动

  ngx_http_optimize_servers里面ngx_http_init_listening监听多个端口,这里是在master进程监听。

(4)http处理流程

  业务处理逻辑是在worker进程处理,每一个worker都有一个ngx_worker_process_cycle()函数无限循环的处理,这个函数处理流程:

  (a)accpet_cb接收和处理事件

  (b)处理 request 的 header 和 body

  (c)产生响应,并发送回客户端

  一个HTTP Request 的处理过程涉及到以下几个阶段:

    (a)初始化 HTTP Request(读取来自客户端的数据,生成 HTTP Request 对象);

    (b)处理请求头;

    (c)处理请求体;

    (d)调用与此请求(location)关联的handler;

    (e)依次调用各phase handler进行处理。

      每一个phase就是一个阶段/状态,每个状态包含若干个handler,依次调用该状态的handler对HTTP Request进行处理,包括获取location配置、产生适当的响应、发送response header、发送response body

二、Nginx模块包括:event、handler、filter、upstream、load-balancer等,本文主要讲handler、filter、upstream等模块的开发;对于这3种模块的开发,模块配置指令结构、模块上下文写法类似。

  (1)handler模块

​      接收客户端请求并产生输出的模块,每个模块就需要定义三个不同的数据结构去进行存储。

    (a)模块配置信息存储结构

//以hello模块为例
typedef struct
{
ngx_str_t hello_string;
ngx_int_t hello_counter;
}ngx_http_hello_loc_conf_t;

    (b)模块配置指令结构

struct ngx_command_s {
ngx_str_t name;//配置指令的名称
ngx_uint_t type;//该配置的类型,配置接收参数个数
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);//处理指令handler
ngx_uint_t conf;
ngx_uint_t offset;
void *post;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值