您的位置:首页 > 理论基础 > 计算机网络

将自己的HTTP模块编译进NGINX

2014-10-10 16:22 3623 查看
当我们完成了自己的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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: