nginx-如何将自己的HTTP模块编译进nginx
上一篇博客讲解了nginx相关的数据结构。
这一篇主要交接如何将自己的模块编译进nginx;
一种常用的简单方法:
1)首先把源代码文件全部放大一个目录下,然后在改目录中编写一个config用于通知Nginx如何编译本模块,这个文件名必须为config。
在configure脚本执行时加入参数--add-module=PATH(上面源码,config的保存目录)
执行正常安装流程是完成Nginx的编译工作。
ps:还有一种复杂方式,就是修改configure脚本执行后生成的obj/Makefile和obj/ngx_module.c文件。
以后进行讲解
-------------------------------------------------------------------------------------------
2.config的写法:
其实config就是一个shell脚本,若是只想开发一个HTTP模块,需要定义3个变量
1.ngx_addon_name:仅在configure执行时使用,一般设置为模块名称。
2.HTTP_MODULES:保存所有HTTP模块名称,空格符相连。重新设置时不要覆盖,只需要添加
例:&HTTP_MODULES ngx_http_my_test_module
3.NGC_ADDON_SRCS:用于指定模块的源代码,空格符相连。
ps:设置时可以使用&ngx_addon_dir变量,等价于configure执行时的--add-module=PATH.
例:
ngx_addon_name=ngx_http_mytest_module
HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_modue"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_module.c"
下面声明一个重点:
以上的3个变量并不是唯一可以再config中自定义的部分,如果开发一个HTTP过滤模块,则需要用HTTP_FILTER_MODULES替代HTTP_MODULES
$CORE_MODULES:核心模块。
$EVENT_MODULES:事件模块
$HTTP_MODULES:HTTP模块
$HTTP_FILTER_MODULES:HTTP过滤模块
$HTTP_HEADERS_FILTER_MODULES:HTTP头部过滤模块.
等。$NGX_ADDON_DEPS:指定模块依赖路径。
-------------------------------------------------------------------------------------------
3.利用configure脚本将制定的模块加入nginx中
首先nginx是通过configure生成程序的
在configure中。
.auto/modules
.auto/make
这2行代码是讲第三方模块加入到nginx中
1)configure如何利用config文件加入nginx中
--add-module=*) NGX_ADDONS="$NGX_ADDONS $value" ;;
在configure命令执行到auto/modules脚本时,将生成ngx_modules.c文件中加入制定的第三方模块。
下面是部分源码:
if test -n "$NGX_ADDONS";then echo configuring addtional modules for ngx_addon_dir in $NGX_ADDONS do echo "adding module in $ngx_addon_dir" if test -f $ngx_addon_dir/config; then .$ngx_addon_dir/config echo "+ $nginx_addon_name was configured" else echo "错误信息" exit 1 fi done fi
当遍历config文件后。就会在ngx_modules.c中定义一个ngx_module_t *ngx_modules[]数组,通过处理请求时的循环访问数组确定该用哪一个模块来处理。
最后就是auto/make把相关模块编译进nginx。
-------------------------------------------------------------------------------------------
4.直接修改Makefile文件
适用于我们需要重新决定ngx_module* ngx_modules[]数组中各模块的顺序,或者在编译源代码时需要加入一些独特的编译选项,那么可以再执行完configure后,对objs/ngx_modules.c和objs/Makefile文件直接进行修改
首先,当我们要修改ngx_modules.c时候,需要加上一行代码
extern ngx_module_t ngx_http_mytypes_module;
然后主动加上ngx_modules数组中
ngx_modules_t *ngx_modules[] = { ... &ngx_http_upstream_ip_hash_module, &ngx_http_mytest_module, $ngx_http_write_filter_module, ... NULL };
注意我么模块加入的顺序十分重要,因为nginx中模块调用顺序是正序所需
最后就是修改Makefile.
obj/addon/httpmodule/ngx_http_mytest_modules.0:$(ADDON_DEPS)\ ../sample/httpmodule/ngx_http_mytest_modules.c $(CC) -c $(CFLAGS) $(ALL_INCS) \ -o objs/addon/httpmdoule/ngx_http_mytest_module.o\ ../sample/httpmodule//ngx_http_mytest_module.c
然后把目标文件链接到Nginx中
objs/nginx: objs/src/core/nginx.o ... objs/addon/httpmodule/ngx_http_mytest_module.o\ objs/ngx_modules.o $(LINK) -o objs/nginx\ objs/src/core/nginx.o\ ... objs/addon/httpmodule/ngx_http_mytest_module.o\ objs/ngx_modules.o\ -lpthread -lcrypt -lpcre -lcrypto -lcrypto -lz
这个是修改文件,所以不正确的修改可能导致nginx出错,所以慎用

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Centos 6.4下 MySQL配置主从服务(集群)
Centos 6.4下 MySQL配置主从服务(集群) 我们前面两篇文章都分别介绍了Mysql的安装及配置、备份及还原,今天我们继续前面的环境介绍一下Centos 6.4下MySQL配置主从实现数据同步,也可以理解为双机热备,来提高服务器的高可用性。对于Mysql的服务器配置就不多介绍了,如果有不明白的可以参阅前面的MySQL文章介绍; 配置MySQL主服务器的my.cnf文件 我们首先打开MySQL主服务器的配置文件 vim/etc/my.cnf 默认配置 我们需要添加以下内容到MySQL服务主配置文件内; #设置服务器ID,为1的表示为主服务器;如果服务器没有以下配置,添加,如果有就跳过。 server-id=1 #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。 log_bin=mysql-bin? #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行\ binlog-do-db=DB1 #不同步mysql系统数据库 binlog-ignore-db=mysql 注:一定要加入到加到mysqld下面,如果加入的位置或者信息不对的...
- 下一篇
python实现自动监控网站并发送邮件告警
通过定时执行python脚本,可以实现定期批量访问网站,如果发现网站打不开,第一时间发邮件到管理员邮箱进行预警 这里用的是python3.5 需要安装的插件: smtplib:发邮件需要用到 pycurl:访问网站时会需要用到 linecache:在读取txt网站清单时需要用到 具体思路: python程序从txt里面批量读取到网站的信息,通过Curl.py模拟浏览器去访问网站,并且把访问的结果写入到以自己的网站名称-日期.txt格式的文件中记录;有几种情况: 1、如果发现打不开了,直接发邮件提示网站已经打不开 2、发现可以打开,读取文件中上一次访问的情况(读取txt文件最后一行), 1)如果发现上一次是打不开的,发邮件提醒网站已经恢复了 2)如果发现上一次是打得开的(200的返回码),只是记录网站访问的日志就可以了 总共4个文件, Email.py是邮件类,主要用来发邮件的时候调用,这里需要按照你的情况改成你的邮箱(msg['From']),邮箱服务器地址(SMTP地址),和你的邮箱密码(SMTP.login) Email.py #!/usr/bin/python #-*-c...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境