Author: haoransun
Wechat: SHR—97
学习来源:极客时间-Nginx核心知识100讲,本人购买课程后依据视频讲解汇总成个人见解。
前言
动态模块可以在使用Nginx中升级Nginx时减少编译环节。本文主要讲的是动态模块编译及使用的流程,再用一个例子来演示。
动态模块-减少编译环节
左上图 是没有使用动态模块的编译方式及结果。
左下图 是使用了动态模块的编译及结果(生成了指定模块的动态库)。
动态库与静态库区别:静态库会将所有的源代码编译进最终的二进制可执行文件中;动态库在Nginx二进制可执行文件中只保留了调用它的地址,在需要用到动态库的功能时,由Nginx的二进制可执行文件(Nginx Executable)去调用这个动态库,再去完成对应的功能。好处:当我们仅仅需要修改某一个模块、升级某个模块的功能时(特别是当Nginx编译了大量的第三方模块),重新编译这个动态库,而不用替换二进制可执行文件,编译出新的动态库后,只需要替换出旧的动态库,让 Nginx reload即可使用新的模块功能。
具体步骤:上右图6步骤
工作流程:
Configure加入动态模块:只有部分模块可以以动态模块的身份编译
执行make,编译出 binary
启动时会去读 ngx_modules[] 数组,在模块数组中会发现使用了某个动态模块
在nginx.conf中需要加入一个配置项 load_modules,这个配置项指明了这个动态模块所在的路径
接下来就可以在Nginx进程中打开动态库并上面的模块加入模块数组中。
基于模块数组再进行初始化过程。
演示
查看可以增加哪些动态模块
1 | ./configure --help | more |
以–with-http-image_filter_module=dynamic 为例来进行演示。
1 | ./configure --prefix=/home/geek/nginx_tmp/ --with http_image_filter_module=dynamic |
我们打开了 8080端口,把一些文件放在了test文件下
在test文件夹下,我们存放了一张图片
用浏览器访问该图片
而上述动态模块的功能则是可以实时的把图片压缩成更小的图片
安装好的目录中多了一个 modules目录,在这个目录中多出了一个动态库,Linux中所有的动态库是以 .so结尾,静态库是以 .a 结尾的。
打开nginx配置文件,调用 load_module 这个配置项,将相对路径放在此处。
同时将图片放缩
图片没有放缩,是因为浏览器缓存了这张图片,按F12,禁用缓存,再次刷新就可以了。