标签:ngx MODULES modules module echo 深入 模块 NGX
1. configure 添加模块
1.1 添加一个 http 模块
在./src/test下创建config
内容如下
# 定义模块名称
1 ngx_addon_name=ngx_http_test_module
# 向http类添加 新模块
2 HTTP_MODULES="$HTTP_MODULES ngx_http_test_module"
# 添加源文件
3 NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_test_module.c"
如果添加过滤模块则为
2 HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES ngx_http_test_module"
1.2 原理分析
1.2.1 加载config配置
--add-module就是 设置 NGX_ADDONS,
并且一次只能设置一个,所以要添加多个模块,需要使用多个 --add-module
343 --add-module=*) NGX_ADDONS="$NGX_ADDONS $value" ;;
当 NGX_ADDONS 不为空,则加载相关 config ,以设置变量
1197 if test -n "$NGX_ADDONS"; then
1198
1199 echo configuring additional modules
1200
1201 for ngx_addon_dir in $NGX_ADDONS
1202 do
1203 echo "adding module in $ngx_addon_dir"
1204
1205 ngx_module_type=
1206 ngx_module_name=
1207 ngx_module_incs=
1208 ngx_module_deps=
1209 ngx_module_srcs=
1210 ngx_module_libs=
1211 ngx_module_order=
1212 ngx_module_link=ADDON
1213
1214 if test -f $ngx_addon_dir/config; then
1215 . $ngx_addon_dir/config
1216
1217 echo " + $ngx_addon_name was configured"
1218
1219 else
1220 echo "$0: error: no $ngx_addon_dir/config was found"
1221 exit 1
1222 fi
1223 done
1224 fi
1.2.2 生成ngx_modules.c
1286 modules="$CORE_MODULES $EVENT_MODULES"
1295 if [ $HTTP = YES ]; then
1296 modules="$modules $HTTP_MODULES $HTTP_FILTER_MODULES \
1297 $HTTP_AUX_FILTER_MODULES $HTTP_INIT_FILTER_MODULES"
1298
1299 NGX_ADDON_DEPS="$NGX_ADDON_DEPS \$(HTTP_DEPS)"
1300 fi
1301
1383 cat << END > $NGX_MODULES_C
1384
1385 #include <ngx_config.h>
1386 #include <ngx_core.h>
1387
1388 $NGX_PRAGMA
1389
1390 END
1391
1392 for mod in $modules
1393 do
1394 echo "extern ngx_module_t $mod;" >> $NGX_MODULES_C
1395 done
1396
1397 echo >> $NGX_MODULES_C
1398 echo 'ngx_module_t *ngx_modules[] = {' >> $NGX_MODULES_C
1399
1400 for mod in $modules
1401 do
1402 echo " &$mod," >> $NGX_MODULES_C
1403 done
1404
1405 cat << END >> $NGX_MODULES_C
1406 NULL
1407 };
1408
1409 END
1410
1411 echo 'char *ngx_module_names[] = {' >> $NGX_MODULES_C
1412
1413 for mod in $modules
1414 do
1415 echo " \"$mod\"," >> $NGX_MODULES_C
1416 done
1417
1418 cat << END >> $NGX_MODULES_C
1419 NULL
1420 };
1421
1422 END
1.2.4 生成makefile
生成编译make
407 # the addons sources
408
409 if test -n "$NGX_ADDON_SRCS"; then
410
411 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
412
413 for ngx_src in $NGX_ADDON_SRCS
414 do
415 ngx_obj="addon/`basename \`dirname $ngx_src\``"
416
417 ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \
418 | sed -e "s/\//$ngx_regex_dirsep/g"`
419
420 ngx_obj=`echo $ngx_obj \
421 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
422 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
423 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
424 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
425
426 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
427
428 cat << END >> $NGX_MAKEFILE
429
430 $ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
431 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
432
433 END
434 done
435
436 fi
1.2.5 生成链接
225 cat << END >> $NGX_MAKEFILE
226
227 build: binary modules manpage
228
229 binary: $NGX_OBJS${ngx_dirsep}nginx$ngx_binext
230
231 $NGX_OBJS${ngx_dirsep}nginx$ngx_binext: $ngx_deps$ngx_spacer
232 \$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_binext$n gx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
233 $ngx_rcc
234 $ngx_long_end
235
236 modules:
237 END
标签:ngx,MODULES,modules,module,echo,深入,模块,NGX 来源: https://www.cnblogs.com/yangxinrui/p/16282560.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。