2. Components of an Nginx Module
2.Nginx模块的组成
我说过,Nginx模块的构建是很灵活的。这一节讲描述的东西会经常出现。它可以帮助你理解模块,也可以作为开发模块的手册。
提示:本节讨论的module源文件:
http://www.evanmiller.org/nginx/ngx_http_circle_gif_module.c.txt
2.1. 模块配置Struct(s)
模块的配置struct有三种,分别是main,server和location。绝大多数模块仅需要一个location配置。
名称约定如下:
ngx_http_<module name>_(main|srv|loc)_conf_t. 例子:
typedef struct {
u_int max_radius;
u_int min_radius;
u_int step_radius;
unsigned char** circle_templates;
size_t* circle_sizes;
ngx_flag_t enable;
} ngx_http_circle_gif_loc_conf_t;
注意到上面展示了Nginx的一些特殊类型:(ngx_uint_t 和 ngx_flag_t); 这些只是基本类型的别名而已。(如果想知道具体是什么的别名,可以参考
core/ngx_config.h ). 这些类型用在配置结构体中的情形很多。
2.2. 模块指令(Module Directives)
模块的指令是定义在一个叫做
ngx_command_t的静态数组中的。下面举个我自己写的小模块中的例子,来告诉你模块指令是如何声明的:
static ngx_command_t ngx_http_circle_gif_commands[] = {
{ ngx_string("circle_gif"),
NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
ngx_http_circle_gif,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },
{ ngx_string("circle_gif_min_radius"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_conf_set_num_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_circle_gif_loc_conf_t, min_radius),
NULL },
...
ngx_null_command
};
下面是结构体
ngx_command_t(静态数组里的每一个元素)的定义 , 你可以在
core/ngx_conf_file.h找到它:
struct ngx_command_t {
ngx_str_t name;
ngx_uint_t type;
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
ngx_uint_t conf;
ngx_uint_t offset;
void *post;
};
结构体成员是多了点,不过各司其职,都有用处。
1)结构体成员
name 是指令的字符串(顾名思义就是指令名称),不能包含空格. 它的类型是
ngx_str_t, 通常都是以像(e.g.)
ngx_str("proxy_pass")这样的方式来实例化. 注意:
ngx_str_t包含一个存放字符串内容的
data字段,和一个存放字符串长度的
len字段。Nginx广泛地使用这个类型来存放字符串。
2)结构体成员
type是标识的集合,表明这个指令在哪里出现是合法的、指令的参数有几个。应用中,标识一般是下面多个值的BIT或:
* NGX_HTTP_MAIN_CONF: 指令出现在main配置部分是合法的
* NGX_HTTP_SRV_CONF: 指令在server配置部分出现是合法的 config
* NGX_HTTP_LOC_CONF: 指令在location配置部分出现是合法的
* NGX_HTTP_UPS_CONF: 指令在upstream配置部分出现是合法的
* NGX_CONF_NOARGS: 指令没有参数
* NGX_CONF_TAKE1: 指令读入1个参数
* NGX_CONF_TAKE2: 指令读入2个参数
* ...
* NGX_CONF_TAKE7: 指令读入7个参数
* NGX_CONF_FLAG: 指令读入1个布尔型数据 ("on" or "off")
* NGX_CONF_1MORE: 指令至少读入1个参数
* NGX_CONF_2MORE: 指令至少读入2个参数
这里还有很多其他的选项:
core/ngx_conf_file.h.
3)结构体成员
set 是一个函数指针,它指向的函数用来进行模块配置;这个设定函数一般用来将配置文件中的参数传递给程序,并保存在配置结构体中。设定函数有三个入参:
*(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
1. 指向结构体 ngx_conf_t 的指针, 这个结构体里包含需要传递给指令的参数
2. 指向结构体 ngx_command_t 的指针
3. 指向模块自定义配置结构体的指针
设定函数会在遇到指令时执行,Nginx提供了多个函数用来保存特定类型的数据,这些函数包含有:
* ngx_conf_set_flag_slot: 将 "on" or "off" 转换成 1 or 0
* ngx_conf_set_str_slot: 将字符串保存为 ngx_str_t
* ngx_conf_set_num_slot: 解析一个数字并保存为int
* ngx_conf_set_size_slot: 解析一个数据大小(如:"8k", "1m") 并保存为size_t
当然还有其他的,在
core/ngx_conf_file.h中很容易查到。如果你觉得现有这些内置的函数还不能满足你,当然也可以传入自己的函数引用。
这些内置函数是如何知道把数据存放在哪里的呢?这就是接下来两个结构体
ngx_command_t的成员
conf 和
offset要做的事了.
4)
conf 告诉Nginx把数据存在模块的哪个配置中,是main配置、server 配置, 还是 location 配置 ?(通过 NGX_HTTP_MAIN_CONF_OFFSET, NGX_HTTP_SRV_CONF_OFFSET, 或者 NGX_HTTP_LOC_CONF_OFFSET).
5)
offset 确定到底是保存在结构体的哪个位置。
6)最后,
post指向模块在读配置的时候需要的一些零碎变量。一般它是NULL。
ngx_command_t数组以ngx_null_command 为终结符(就好像字符串以'\0'为终结符一样).
本例中,对应的实现为:
static char *
ngx_http_circle_gif(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf;
ngx_http_circle_gif_loc_conf_t *cglcf = conf;
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
clcf->handler = ngx_http_circle_gif_handler;
cglcf->enable = 1;
return NGX_CONF_OK;
}
分享到:
相关推荐
计算机图形学之动画和模拟算法:Inverse Kinematics:游戏开发中的逆向运动学实现.docx
nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台启动脚本nacos 后台
Java 毕业设计/节课作业【10个完整项目+源码+数据库+毕设论文+视频部署讲解】, 1智能摄影分享网站系统, 2智能养老院管理系统, 3智能考编论坛网站的设计与实现, 4智能仓库管理系统, 5智能足球社区管理系统, 6智能社区物资交易互助平台, 7智能校园失物招领系统, 8智能it职业生涯规划系统--论文, 9智能javaweb的新能源充电系统pf, 10智能“共享书角”图书借还管理系统--论文
【作品名称】:基于python + openCV 实现的人脸识别 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:实验环境 python 2.7 numpy 1.12.1 Pillow 4.1.1 openCV 2.4.13 人脸识别程序主要分为三个部分: 创建一个dataset:datasetCreator.py 训练识别器:trainner.py 检测器:detector.py dataset 通过摄像头每隔0.1s检测一次人脸,并将检测到的人脸储存至dataSet路径下(如果没有,需要自己创建) trainner 使用openCV自带的LBP人脸特征值提取方法对dataSet路径下的所有人脸进行识别训练 生成训练文件trainningData.yml存放在recognizer路径下 detector 使用训练后的识 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
本系统的开发与设计是基于vue为前端页面核心框架为django/flask,技术方面主要采用了Html、Js、CSS3、python、Mysql。 本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台 ②前端开发选择:Vue。 ②后端开发选择:python、django/flask。 ③数据库选择:MySQL。 ④开发工具选择:pycharm、Navicat for MySQL。 包含了我的信息、用户管理、期货公司管理、开户信息管理、充值信息管理、期货期货信息管理、期货投资管理、取消投资管理、投资风险管理、意见反馈、系统管理
非常好的电子设计小软件屏幕颜色获取软件非常好用的软件.zip
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
springboot034基于Springboot+Vue在线商城系统设计与开发毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
基于安卓的毕业设计源码
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
内容概要:本书详细介绍了操作系统的基本概念、发展历程、结构特点和关键功能。从操作系统的定义、特征、功能出发,逐步探讨其形成和发展过程,涵盖人工操作阶段、单道和多道批处理、分时操作系统等多种类型。随后深入讲解操作系统的内部结构,包括整体结构、分层结构、虚拟机结构等,并重点介绍常用的Windows、UNIX和Linux系统。此外,书中详细讨论了处理器管理、存储管理、进程同步与死锁、存储管理和网络操作系统等多个核心主题,提供了丰富的实例和思考练习。 适合人群:计算机科学专业的学生、从事计算机系统开发的技术人员,尤其是初学者和有一定基础的研发人员。 使用场景及目标:帮助读者理解操作系统的基本原理和技术细节,掌握常用操作系统的特性和应用场景,适用于课程学习和实际项目开发。 其他说明:本书内容全面,理论与实践相结合,适合作为教材和参考书使用。通过阅读本书,读者不仅可以深入了解操作系统的工作原理,还可以通过思考练习提升实际操作能力。
springboot166基于Springboot+Vue的纺织品企业财务管理系统-毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
keil5:步进电机(S)曲线加减速代码
非常好的电子设计小软件MDK3.80A非常好用的软件.zip
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
Unity Cesium打包后无法加载显示修复工具 # 问题 编辑器运行正常加载显示,打包后在其它机器上无法加载显示 # 修复方法 下载到问题机器,双击InstallCesium.bat 进行修复 # 支持版本 1.2.0、1.5.0、1.7.1、1.8.0、1.11.1
行业研究报告、行业调查报告、研报
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手