ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《深入理解ngx》—— 基础模块

2022-05-17 22:01:34  阅读:210  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有