频道栏目
首页 > 资讯 > 其他 > 正文

nginx-如何将自己的HTTP模块编译进nginx

16-08-25        来源:[db:作者]  
收藏   我要投稿

这一篇主要交接如何将自己的模块编译进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文件中加入制定的第三方模块。

下面是部分源码:

iftest-n"$NGX_ADDONS";then

echoconfiguringaddtionalmodules

forngx_addon_dirin$NGX_ADDONS
do
echo"addingmodulein$ngx_addon_dir"

iftest-f$ngx_addon_dir/config;then
.$ngx_addon_dir/config

echo"+$nginx_addon_namewasconfigured"

else
echo"错误信息"
exit1
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)\
-oobjs/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)-oobjs/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出错,所以慎用

相关TAG标签
上一篇:linux中误删除程序包恢复示例
下一篇:Centos 6.4下 MySQL配置主从服务(集群)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站