nginx的HTTP模块编写

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:

本文是学习《深入理解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="HTTPMODULESngxhttpmytestmodule"NGXADDONSRCS="HTTPMODULESngxhttpmytestmodule"NGXADDONSRCS="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

目录
相关文章
|
5天前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
|
JSON 前端开发 JavaScript
Nginx http相关常用配置总结
Nginx http相关常用配置总结
161 0
|
应用服务中间件 Linux Shell
【Nginx】第五节 HTTP请求
【Nginx】第五节 HTTP请求
84 0
【Nginx】第五节 HTTP请求
|
存储 缓存 负载均衡
01.Nginx基础Http原理
1.Http协议概述HTTP全称HyperText Transfer Protocol中文名为超文本传输协议1.什么是超文本?包含有超链接(Link)和各种多媒体元素标记的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。html文件->包含各种各样的元素(URL链接)->形成web page简称web页面。2.那什么是URL,URL简称统一资源定位符。那URL的组成部分是由协议, 域名:端口, 路径和文件名3.那超文本传输http协议是什么?是一种按照URL指示,将超文本文档从一台主机(
229 0
|
存储 应用服务中间件 nginx
nginx http模块配置合并
在配置nginx.conf文件的时候,我们很容易发现,有部分配置项是既可以配置在http块,也可以配置在server块,还可以配置在location块中。但是并不是所有的配置项都可以在任意位置进行配置的,根据配置项所起到的作用,nginx对各个配置块所能使用的位置进行了定义。
1170 0
|
存储 应用服务中间件 nginx
九爷带你了解 nginx HTTP模块配置常用指令
一、HTTP模块的作用是什么? Nginx的HTTP模块用于控制Nginx的HTTP进程。 二、配置指令 1. alias 含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适用文件系统的路径。
1300 0
|
Web App开发 Linux 应用服务中间件
NGINX Plus 现在完全支持 HTTP/2
 为什么要使用 HTTP/2?   HTTP/2 使数据传输更高效,对你的应用程序更安全。 HTTP/2 相比于 HTTP/1.x 有五个提高性能特点:   完全复用 – 在一个保持激活(keepalive)的连接上,HTTP/1.1 强制按严格的顺序来处理请求。
1703 0
|
Web App开发 监控 应用服务中间件
Nginx http模块(学习笔记二十一)
1.HTTP的核心模块. 这些HTTP模块会在编译Nginx时自动编译进来,除非使用configure命令禁止编译这些模块. (1)alias指令. 该指令用于在URL和文件系统路径之间实现映射.
1017 0
|
应用服务中间件 nginx
|
Web App开发 应用服务中间件 nginx