nginx的HTTP模块编写

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介:

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



本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/06/10/3130890.html,如需转载请自行联系原作者

相关文章
|
7月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
731 87
|
6月前
|
安全 应用服务中间件 Linux
Debian操作系统如何安装Nginx并开启HTTP2
本指南介绍了在Linux系统中通过源码编译安装Nginx的完整流程。首先更新软件包列表并安装必要的编译依赖,接着下载指定版本的Nginx源码包(如1.24.0),检查文件完整性后解压。随后通过配置脚本指定安装路径与模块(如HTTP SSL模块),执行编译和安装命令。最后创建软链接以便全局调用,并提供启动、停止及重载Nginx的命令,同时提醒注意安全组设置以确保正常访问。
|
9月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
678 90
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
904 7
|
7月前
|
JavaScript 前端开发 开发者
Node学习笔记:HTTP模块
总的来说,Node.js的HTTP模块是一个强大的工具,可以帮助你处理HTTP协议的各种需求。无论你是想开设自己的餐厅(创建服务器),还是想去别的餐厅点菜(发出请求),HTTP模块都能满足你的需求。
241 18
|
11月前
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
1690 20
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
386 62
|
12月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
3729 8
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
1145 3
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
214 0

热门文章

最新文章