Nginx更新:支持动态加载模块

nginx在这两天发布了1.9.11版本,开始支持了动态加载模块,只需要将第三方模块编译生成.so文件,在配置文件中添加即可了,大大增加了nginx的实用性,同时也解决了增加模块需要重新编译的问题。


原理图:

dynamic-modules-executable

这是由编译之后直接生成可执行的二进制文件,对于module,必须在预编译时设定好,如果想要修改则必须重新编译;

dynamic-modules-shared-object

增加了动态模块之后,我们可以看到,二进制文件和动态模块文件(.so)是分开的,这种做法更像是apache httpd,可以通过修改配置文件来进行增加或者删除模块。

动态加载模块Howto:

在第一个发布的版本(nginx 1.9.11)当中,仅下列几个模块是可以被编译成动态模块的:

 编译的时候只需要添加在–with参数之后添加一个=dynamic即可:

 编译好源码之后,会创建一个二级目录modules,默认的位置当然是/usr/local/nginx/modules

想要加载模块只需要在配置文件当中的main区域当中加入load_module参数。修改后重新加载配置文件或者重启nginx即可加载指定的模块,模块路径可以使用绝对路径也可以使用相对路径:

 注释掉相应的load_module语句并重新加载配置文件就可以取消动态模块的加载,用起来还是很方便的。

第三方模块的转换:

将第三方模块转换成动态模块,工程量可能会比较大,一些模块只需要修改config文件,而另外一些模块可能改动就比较大,具体的可以查看对应的文档对自己开发的模块进行修改。而编译的时候其实就简单了许多,只需要使用–add-dynamic-module=即可,使用方法和–add-module其实差不多:

 编译之后也会在modules目录生成.so文件的,这样就可以方便的加载或者取消了

作者: 五月里徜徉的小猫咪

伪技术宅,伪文艺青年

《Nginx更新:支持动态加载模块》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注