设为首页 收藏本站
查看: 1234|回复: 0

[经验分享] nginx的HTTP模块编写

[复制链接]

尚未签到

发表于 2015-7-26 12:51:45 | 显示全部楼层 |阅读模式
  本文是学习《深入理解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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-90804-1-1.html 上篇帖子: 转载:配置Windows下Nginx + PHP 开发环境 下篇帖子: Nginx学习笔记(三) Nginx基本数据结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表