将自己的HTTP模块编译进NGINX

来源:互联网 发布:淘宝交易风险保障 编辑:程序博客网 时间:2024/06/05 00:17

         当我们完成了自己的HTTP模块,之后我们需要将这部分编译进nginx之中,那么如何进行这项操作呢,其实很简单,自己写一个配置文件,在*.c文件的目录下新建一个config文件,不用怀疑这就是整个文件名称config,在config文件中只需要三行就可以

ngx_addon_name=ngx_gttp_echo_moduleHTTP_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文件*/makesudo 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    donefi

可以看到,$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


0 0
原创粉丝点击