上一篇博客解释了nginx相关的算法设计。
这个关键工作交接如何把自己的模块编译成nginx;
1)先把所有的源文件放大到一个目录下,然后在改变后的目录下写一个config,通知Nginx如何编译这个模块。此文件夹的名称必须是config。
Ps:还有一个比较复杂的方法,就是改变执行configure脚本后形成的obj/Makefile和obj/ngx_module.c文档。
然后进行解释
-
2.2.config的编写:
实际上,config是一个shell脚本。如果你只为开发设计一个HTTP模块,你必须定义三个独立变量
1.ngx_addon_name:仅在执行configure时应用,一般设置为模块名。
2.HTTP_MODULES:存储所有HTTP模块名,后跟空。再次设置时,不必覆盖,只需添加
。
示例:&HTTP_MODULESngx_HTTP_my_test_module
3.NGC_阿登_SRCS:用作特定模块的源代码,由空case连接。
Ps:设置&X_addon_dir独立变量时可以应用,执行configure时等于-add-module=path。
示例:
ngx_addon_name=ngx_http_mytest_module
HTTP_MODULES="$HTTP_MODULESngx_HTTP_mytest_modue"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS$NGX_ADDON_dir/NGX_http_mytest_module.c""/br/]
这是一把钥匙:
以上三个独立变量不是唯一可以在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.使用配置脚本将开发的模块添加到nginx中。
首先,nginx根据配置
形成程序流程
在配置中。
。汽车/模块
。自动/制作
这两行代码意味着第三方模块被添加到nginx
1)配置如何将配置文件添加到nginx
-add-module=*)NGX_ADDONS="$NGX_ADDONS$value";;
当在auto/modules脚本中执行configure指令时,就会形成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解析xmlconfig文件后。ngx_modules.c中会定义一个NGX_modules_t*NGX_modules[]的数组,在求解需求时会根据循环的系统浏览数组明确应该使用哪个模块来求解需求。
最后,auto/make将相关模块编译成nginx。
-
4.立即更改Makefile文档。
如果你必须再次决定ngx_module*ngx_modules[]数组中模块的顺序,或者你必须在编译源代码时添加一些不同的编译选项,那么你可以在完成配置后立即更改objs/ngx_modules.c和objs/Makefile的文档。
首先,如果我们要更改ngx_modules.c,我们必须添加另一行代码。
externngx_module_tngx_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失败,所以要小心使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)