第三方模块迁移指南
本文以安装 headers-more-nginx-module-0.37 举例,其他情况类似:
一. 下载第三方包,如:headers-more-nginx-module-0.37.zip
二. 解压缩
unzip headers-more-nginx-module-0.37.zip三. 解压后,文件夹名字 headers-more-nginx-module-0.37
四. 拷贝到 njet modules 目录下
cp -fr headers-more-nginx-module-0.37 modules/五. 进入模块目录
cd modules/headers-more-nginx-module-0.37六.源代码,修改函数,变量。执行:
1. grep NGINX_ -rl ./* | xargs sed -i 's/NGINX/NJET/g'
2. grep nginx -rl ./* | xargs sed -i 's/nginx/njet/g'
3. grep NGX_ -rl ./* | xargs sed -i 's/NGX_/NJT_/g'
4. grep ngx_ -rl ./* | xargs sed -i 's/ngx_/njt_/g'
5. grep Nginx -rl ./* | xargs sed -i 's/Nginx/NJet/g'
6. grep ngx -rl ./* | xargs sed -i 's/ngx/njt/g'七. 进入模块源码目录,源文件改名字
cd src/
for i in ls; do mv -f $i `echo $i | sed 's/^ngx_/njt_/'`; done八. 返回到njet 目录。
九. 配置编译类型。动态或静态
- 静态编译。添加模块路径到 modules_static
echo "./modules/headers-more-nginx-module-0.37" >> modules_static- 动态编译。 添加模块路径到 modules_dynamic
echo "./modules/headers-more-nginx-module-0.37" >> modules_dynamic动态编译的,使用时需要动态加载。 修改 njet.conf 文件
例如:load_module modules/njt_http_headers_more_filter_module.so;十.重新编译njet
./build_cc.sh conf make install常见问题解决
1.missing initializer for field ‘ref_count’ of ‘njt_http_variable_t
./modules/njet-echo-module/src/njt_http_echo_var.c:20:7: error: missing initializer for field ‘ref_count’ of ‘njt_http_variable_t {aka struct njt_http_variable_s}’ [-Werror=missing-field-initializers]
NJT_HTTP_VAR_NOCACHEABLE, 0 },
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/http/njt_http.h:33:0,
from ./modules/njet-echo-module/src/ddebug.h:6,
from ./modules/njet-echo-module/src/njt_http_echo_var.c:4:
src/http/njt_http_variables.h:48:32: note: ‘ref_count’ declared here
njt_uint_t ref_count;
^~~~~~~~~遇到此问题的原因是,NJet对njt_http_variable_t结构进行了修改,增加了一个 ref_count字段,在初始化变量时,需要为每个变量多增加一个字段。具体个性参考下面对echo_module的迁移示例。
修改前
static njt_http_variable_t njt_http_echo_variables[] = {
{ njt_string("echo_timer_elapsed"), NULL,
njt_http_echo_timer_elapsed_variable, 0,
NJT_HTTP_VAR_NOCACHEABLE, 0 },
// ... ...
{ njt_null_string, NULL, NULL, 0, 0, 0, NJT_VAR_INIT_REF_COUNT}
};修改后
static njt_http_variable_t njt_http_echo_variables[] = {
{ njt_string("echo_timer_elapsed"), NULL,
njt_http_echo_timer_elapsed_variable, 0,
NJT_HTTP_VAR_NOCACHEABLE, 0, NJT_VAR_INIT_REF_COUNT },
// ... ...
{ njt_null_string, NULL, NULL, 0, 0, 0, NJT_VAR_INIT_REF_COUNT}
};