当我们完成了自己的HTTP模块,之后我们需要将这部分编译进nginx之中,那么如何进行这项操作呢,其实很简单,自己写一个配置文件,在*.c文件的目录下新建一个config文件,不用怀疑这就是整个文件名称config,在config文件中只需要三行就可以
ngx_addon_name=ngx_gttp_echo_module
HTTP_MODULES="$HTTP_MODULES ngx_http_echo_modules"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_echo_module.c"
我们现在解读下这部分内容,
第一行新建的模块名称。这里需要注意的是模块的名字应该跟 ngx_module_t的变量名称一致才行,否则会出现 unreferenced 之类的错误
第二行是表明该模块是HTTP模块,然后,在加载的时候,可能已经加载了其他模块,而这些模块信息是在$HTTP_MODULES中的,也就是说,当我们加载的时候,$HTTP_MODULES中是有值存在的,所以我们不能直接覆盖,而是追加
第三行同上,我们需要在$NGX_ADDON_SRCS中追加该模块所在的目录地址,换句话说,该目录地址是从我们输入的命令行中写入的
./configure --prefix=/usr/local/nginx/nginx --add-module=/home/*/*/ngx_http_echo_modult.c /*注意这里面一直到目录即可,而不是*.c文件*/
make
sudo make install
其中里面的"/home/*/*/"就是我们在配置文件中config中的$ngx_addon_dir的值,
这样的话,我们就只需要看看是怎么加载的了,这部分代码在源代码的auto文件夹下的modules文件当中
if test -n "$NGX_ADDONS"; then
echo configuring additional 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 " + $ngx_addon_name was configured"
else
echo "$0: error: no $ngx_addon_dir/config was found"
exit 1
fi
done
fi
可以看到,$ngx_addon_dir不止只有一个,也就是说我们可以加载多个模块,同时,除了.c文件以外还需要一个config文件,否则nginx是不加载该模块的。
之前说的是make install是覆盖式安装,现在经过测试,总是出现koi-win复制出错,失败原因是,两者是同一文件,问题还未解决,但是有了另外一种解决方法
,在使用make之后有所变动
其实就是替换/sbin/中的nginx可执行文件,首先将原来的ngxin文件备份
cp nginx/sbin/nginx nginx/sbin/nginx.bak
然后将obj文件夹中的nginx复制到sbin文件夹当中,再进行启动,这样就完成了,测试正常
cp nginx/objs/nginx nginx/sbin
最后启动
sudo /usr/local/nginx/sbin/nginx