首页 > web应用 > Nginx总算支持动态模块了
2016
02-17

Nginx总算支持动态模块了

原文:https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/

翻译:陈洋

编辑:南非蜘蛛


编者按:

Nginx作者Igor一直是很固执的不用动态模块,没想到最终还是妥协了,不过现在Nginx已经是公司了,可能考虑的比较全面、比较商业,Tengine我记得很早就支持了,还是易用性比较重要一些。



最近发布的Nginx 1.9.11版本带来一个重要的新功能:动态模块,给我们以后如何使用Nginx带来了巨大的影响。通过动态模块,你可以在运行时有有选择性的加载第三方或Nginx官方模块。新的实现方式通过API模块保持尽可能的向后兼容。


下一个版本的Nginx Plus(Nginx Plus R9)将基于动态模块新特性进行构建。我们计划创建一个模块仓库,收集那些已经在Nginx Plus上通过测试和认证的第三方模块,使添加常用的扩展更加方便更加放心。如果你希望将你的开源模块或者商业模块在我们的模块仓库中,请通过链接与我们的销售联系。


在此之前,如果要给Nginx增加一个模块,需要将模块与源代码一起编译进Nginx二进制文件,而且不管你是否愿意,每次打开Nginx都会加载此模块。如此以来就很难在操作系统发行版的包中为每个用户创建自定义的Nginx二进制文件。


传统方式

blob.png


在动态模块的第一版中,你仍然需要和Nginx二进制文件一起编译可选模块,但是会为每一个动态加载模块创建一个独立的共享对象,通过Nginx配置文件中的命令来启用和禁用在运行时加载共享对象。


动态模块


blob.png


动态加载Nginx模块


在动态模块第一版中支持以下Nginx模块、模块包的动态构建:

  • GeoIP(ngx_http_geoip_module)

  • Image-Filter (ngx_http_image_filter_module)

  • Mail (包含所有的邮件相关模块: ngxmail{core, auth, imap, pop3, proxy, smtp}_module)

  • Stream (包含所有的Stream相关模块: ngxstream{core, access, limit_conn, proxy, ssl, upstream}_module)

  • XSLT (ngx_http_xslt_module)


可以通过在标准的—with参数后追加=dynamic来生成动态可加载的共享对象,如下所示:

./configure --with-http_geoip_module=dynamic \
              --with-http_image_filter_module=dynamic \
              --with-mail=dynamic \
              --with-stream=dynamic \
              --with-http_xslt_module=dynamic


当你编译安装Nginx 1.9.11时,会创建一个modules的子目录,用来存放动态加载模块共享对象的二进制文件,默认的路径为/usr/local/nginx/modules.


要在运行时加载模块,在全局配置中使用load_module命令,指定动态模块共享文件的路径,并以引号括起来。当重新加载配置或重启Nginx的时候,模块就会被载入。路径可以是相对路径(本例中),也可以是完整路径。

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_module.so";


要在运行时动态的“卸载”一个模块,可以注释或删掉相对应的load_module命令,并重新加载Nginx配置。如果有其他跟这个模块相关的命令,也请确保注释或者删除掉。


转换第三方模块


对于大多数的传统模块的开发者来说,转化为动态加载只需要很少的工作,大多数情况下只需要修改一下源码的配置文件,部分模块可能需要稍微多一些的工作。Nginx 的Wiki中有模块转换指南和模块源配置文件格式的详细信息。


要编译一个已经转换完成的第三方模块为动态模块,可通过新的–add-dynamic-module参数并指定模块的路径:

./configure --add-dynamic-module=/path/to/module/source


和Nginx模块相同,动态模块的共享文件将会被安装到modules子目录中,你可以通过load_module命令来调用这个模块。


我们的开发者关系团队可以协助转换模块,请通过Nginx开发者邮件列表与我们联系。


动态模块展望


在未来的版本中,我们计划在已编译完成的Nginx二进制文件中增加模块,我们也正在编写API模块的文档,当编写完成后将可以通过Nginx Wiki中免费查看。

来吧,开始尝试动态模块吧。


下载Nginx1.9.11(http://nginx.org/en/download.html)




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复