原帖地址:http://www.cnblogs.com/yjf512/archive/2013/06/10/3130890.html
本文是学习《深入理解nginx -- 模块开发与架构解析》的读书笔记
nginx的模块分为4个大类型的模块:
事件模块
HTTP模块
邮件代理相关的mail模块
其他模块
开发HTTP模块流程
这里的HTTP模块是最简单最经常编写的模块,开发一个完整的简单的HTTP模块需要下面几个步骤(以模块名为ngx_http_mytest_module为例):
1 编写config文件(这是为了让nginx在configure过程能找到编写的模块)
下面是编写具体的模块代码结构
2 编写模块结构 ngx_http_mytest_module
这个是模块结构,其中起的作用是:
定义了模块的上下文结构
定义了模块命令结构
3 编写模块上下文结构 ngx_http_mytest_module_ctx
这个结构的意思就是nginx在触发了模块运行的时候,如何处理已经在其他http,server,location定义过的上下文
4 编写模块命令结构 ngx_http_mytest_commands
这个结构的意思就是nginx在配置文件中触发了哪些命令,其中指定了:
触发命令的回调函数
5 触发命令的回调函数 ngx_http_mytest
这个回调函数中可以设置对http请求的具体处理方法
6 对http请求的具体处理方法 ngx_http_mytest_handler
这个方法的参数中可以获取http请求结构,并且可以设置http返回
至此,一个http模块就可以完成了。
对应的各个步骤说明:
1 编写config文件
示例:
ngx_addon_name=ngx_http_mytest_module
HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_module.c"
HTTP_MODULES是设置HTTP需要加载的模块列表,在具体编译的时候会生成modules的数组,然后根据数组的先后顺序一个一个加载
2 ngx_http_mytest_module的结构类型是ngx_module_t
它的结构说明看:
https://github.com/jianfengye/nginx-1.0.14_comment/blob/master/src/core/ngx_conf_file.h
里面的ngx_module_s的结构
最主要记得是要设置上下文结构ctx和命令集commands
3 某块上下文ngx_http_mytest_module_ctx的结构类型是ngx_http_module_t
它的结构说明看:
https://github.com/jianfengye/nginx-1.0.14_comment/blob/master/src/http/ngx_http_config.h
这个结构是如果需要的话在读取,重载配置文件的时候定义的8个阶段
create_main_conf
create_srv_conf
create_loc_conf
preconfiguration
init_main_conf
merge_srv_conf
merge_loc_conf
postconfiguration
4 ngx_http_mytest_commands 是一个ngx_command_s的数组
ngx_command_s的结构说明看:
它的结构说明看:
https://github.com/jianfengye/nginx-1.0.14_comment/blob/master/src/core/ngx_conf_file.h
里面碰到的set回调函数,这个回调函数可以使用nginx预设的14个解析配置方法,或者使用自定义的方法
14个预设的解析配置方法有:
ngx_conf_set_flag_slot
ngx_conf_set_str_slot
ngx_conf_set_str_array_slot
ngx_conf_set_keyval_slot
ngx_conf_set_num_slot
ngx_conf_set_size_slog
ngx_conf_set_off_slot
ngx_conf_set_msec_slot
ngx_conf_set_sec_slot
ngx_conf_set_bufs_slot
ngx_conf_set_enum_slot
ngx_conf_set_bitmask_slot
ngx_conf_set_acccess_slot
ngx_conf_set_path_slot
5 触发命令的回调函数的解析配置方法格式如下:
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
如果使用了上面的14个解析配置方法,就可以不用自己写这个方法了
如果是自己写这个配置解析方法,就需要写第六步
ngx_http_mytest_handler
它的函数定义如下:
static ngx_init_t ngx_http_mytest_handler(ngx_http_request_t *r)
使用ngx_http_request_t指针输入
在ngx_http_request指针中也可以设置HTTP返回
它的结构说明看:
https://github.com/jianfengye/nginx-1.0.14_comment/blob/master/src/http/ngx_http_request.h
一个具体的例子:
https://github.com/jianfengye/MyWorks/tree/master/nginx_module_mytest
本文链接
分享到:
相关推荐
- **HTTP模块**:处理HTTP协议相关的请求,包括服务器配置、日志记录等。 - **第三方模块**:由社区开发,用于扩展Nginx功能,如缓存、压缩、限速等。 2. **创建Nginx模块的基本步骤**: - **理解模块结构**:...
模块编写过程可以分为以下步骤: 1. 创建模块文件夹 2. 创建模块配置文件 3. 创建模块主文件 在创建模块的过程中,开发者需要包含必要的Nginx核心库文件,如ngx_config.h、ngx_core.h、ngx_http.h等,并实现与HTTP...
开发者通常会通过编写自定义模块来扩展Nginx的功能,以满足特定的需求。本文将围绕"nginx-notice-2"这一Nginx模块源码进行深入探讨,旨在理解其工作原理及如何在Nginx 0.7版本中进行编译。 首先,让我们理解Nginx...
Nginx通过模块化设计,实现了功能的扩展和组合,读者可以学习到如何编写HTTP、SSL、缓存、邮件等不同类型的模块,以及如何处理HTTP请求生命周期中的各个阶段。此外,还会涉及到模块间的通信机制,如 ngx_chain、ngx_...
Nginx的模块化设计是其灵活性和可扩展性的关键,书中将深入探讨这一特性,讲解如何设计和编写自己的Nginx模块,包括HTTP模块、SSL模块、缓存模块等。 在Nginx模块开发方面,本书将涵盖以下关键知识点: 1. **模块...
在模块开发部分,读者将学习到如何编写Nginx模块,包括HTTP模块、HTTPS模块、URL重写模块、访问控制模块等。这涵盖了从模块结构、初始化、请求处理、到输出过滤等各个阶段。此外,还会涉及模块间的通信和协作,以及...
Nginx作为一个高性能的HTTP和反向代理服务器,其强大的可扩展性使得开发者可以通过编写模块来实现特定的功能,以满足各种复杂的网络服务需求。 在Nginx中,模块是其核心功能的构建块,负责处理请求、响应、缓存、...
例如,HTTP模块处理HTTP请求,代理模块转发请求到其他服务器,日志模块记录访问日志等。模块之间的协作通过Nginx的事件模型和请求处理流程来协调。 3. **Nginx模块的组成** - **配置结构体**:每个模块都有自己的...
Nginx模块开发OpenResty简单使用笔记整理 ### Nginx简介 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中。与Apache相比。 同时,大量的第三方扩展模块也令...
ngx_python 是为 nginx 嵌入 python 脚本的模块。环境- python 2.7.*- nginx-1.6.3 安装```sh git clone https://github.com/rryqszq4/ngx_python.git wget 'http://nginx.org/download/nginx-1.6.3.tar.gz' ...
Nginx模块分为核心模块、HTTP模块、 mail模块和-stream模块,开发者可以根据需求扩展功能。编写Nginx模块涉及C语言编程,需要理解Nginx的API接口和生命周期管理,以及如何处理请求和响应。 书中可能还会涉及Nginx的...
4. 模块开发基础:介绍如何编写C语言的Nginx模块,包括模块结构、API使用和编译构建。 5. 高级模块开发:讨论更复杂的模块开发技巧,如多线程、内存管理、模块间通信等。 6. 负载均衡和缓存策略:讲解Nginx如何实现...
Emiller的Nginx模块开发文档是一份详细指导,旨在帮助开发者了解如何为Nginx Web服务器编写扩展模块。Nginx作为一个高性能的HTTP和反向代理服务器,其可扩展性主要体现在模块化设计上,允许开发者根据需求定制功能。...
本指南将深入讲解Nginx模块的开发过程,包括预备知识、模块的基本组成、不同类型的模块(如Handler、Filter和Load-balancer),以及如何编写、编译新的Nginx模块。 1. 预备知识 在开始Nginx模块开发之前,开发者应...
8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存? 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的NCache网页缓存系统 第3部分 实战篇 第10章 ...
《深入理解Nginx模块开发与架构解析》这本书是针对Nginx web服务器进行深入学习和技术探索的专业指南。Nginx作为一个高性能、反向代理、负载均衡的HTTP和反向代理服务器,因其高效的性能和灵活的配置,在互联网行业...