动态加载模块

    • 如果你想要编译官方模块为动态模块,你需要在configure的时候加上类似这样的指令(—with-http_xxx_module),./configure —help可以看到更多的细节.

    • 如果只想要安装官方模块为动态模块(不安装Nginx),那么就只需要configure之后,执行 make dso_install命令.

    • 动态加载模块的个数限制为128个.

    • 如果已经加载的动态模块有修改,那么必须重起Tengine才会生效.

    • 只支持HTTP模块.

    • 模块 在Linux/FreeeBSD/MacOS下测试成功.

    1. path /home/dso/module/;

    设置默认的动态模块加载路径为.


    load命令用于在指定的路径(module_path),将指定的模块(module_name)动态加载到Nginx中。

    其中module_path和module_name可以只写一个,如果没有module_path参数,那么默认path是 $(modulename).so.

    如果没有module_name参数,那么默认name就是module_path删除掉".so"后缀.

    对于module_path的路径查找,这里是严格按照下面的顺序的

    • 相对于dso_path设置的相对路径.
    • 相对于默认的加载路径的相对路径(NGX_PREFIX/modules或者说configure时通过—dso-path设置的路径).
    1. load ngx_http_empty_gif_module ngx_http_empty_gif_module.so;
      load ngx_http_test_module;
      load ngx_http_test2_module.so;

    将会从ngx_http_empty_gif_module.so.加载empty_gif模块。以及从ngx_http_test_module.so加载ngx_http_test_module模块.第三条指令是从ngx_http_test2_module.so加载ngx_http_test2_module模块.


    上面这个例子将会插入my_filter模块到addition_filter之前执行。


    include命令主要用于指定一个文件,这个文件里面包含了对应模块顺序(module_stub指令),有关于module_stub指令可以看下面的module_stubs部分.

    1. include module_stubs

    将会加载conf/module_stubs这个文件,这个文件主要是由(module_stub指令组成).


    如果你想要在安装完Tengine之后,编译官方模块为动态模块,那么你需要按照如下的步骤:

    • 在configure的时候打开你想要编译的模块.
    1. $ ./configure --with-http_sub_module=shared
    • 编译它.
    • 安装动态模块.

      它将会复制动态库文件到你的动态模块目录,或者你也可以手工拷贝动态模块文件(文件是在objs/modules)到你想要加载的目录.

      你能够使用dso_tool(在Nginx安装目录的sbin下)这个工具来编译第三方模块.

      1. ./dso_tool --add-module=/home/dso/lua-nginx-module