这个错是因为只升级了nginx主程序,外部模块没有升级,还是老版本。
一般情况下我们没有使用外部模块的功能。只要禁用加载外部模块就行了。
如果确实使用了外部模块,那么就需要升级外部模块到对应的版本。
1,禁用外部模块加载
编辑nginx的配置文件 /etc/nginx/nginx.conf
按照下面添加注释
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
# include /usr/share/nginx/modules/*.conf;
# include /usr/share/nginx/modules/*.conf;
2,升级外部模块
这里要注意一下,在1.16版本中有5个外部模块
# ls /usr/lib64/nginx/modules/
ngx_http_image_filter_module.so ngx_http_perl_module.so ngx_http_xslt_filter_module.so ngx_mail_module.so ngx_stream_module.so
ngx_http_image_filter_module.so ngx_http_perl_module.so ngx_http_xslt_filter_module.so ngx_mail_module.so ngx_stream_module.so
在新版本中只有前3个是外部模块,mail和stream两个模块已经是内置模块了。
目前nginx的全部外置模块列表如下:
nginx-module-geoip
nginx-module-image-filter *
nginx-module-njs
nginx-module-perl *
nginx-module-xslt *
nginx-module-otel (从1.25.3开始)
nginx-module-image-filter *
nginx-module-njs
nginx-module-perl *
nginx-module-xslt *
nginx-module-otel (从1.25.3开始)
标*的三个是我们1.16中的外部模块。
可以运行下面的命令确认
nginx -V
查看输出信息中可以看到有 --with-mail 和 --with-stream 。
所以我们只需要更新 ngx_http_image_filter_module.so ngx_http_perl_module.so ngx_http_xslt_filter_module.so 三个模块即可。
因为我们已经配置了nginx官方仓库,所以直接安装即可(注意版本号和nginx的版本号一致即可):
仓库配置请参考【Alibaba Cloud Linux3通过yum安装指定版本的nginx】
yum install nginx-module-image-filter-1.24.0-1.el7.ngx
yum install nginx-module-perl-1.24.0-1.el7.ngx
yum install nginx-module-xslt-1.24.0-1.el7.ngx
yum install nginx-module-perl-1.24.0-1.el7.ngx
yum install nginx-module-xslt-1.24.0-1.el7.ngx
查看安装结果:
# ls /usr/lib64/nginx/modules/
ngx_http_image_filter_module-debug.so ngx_http_perl_module-debug.so ngx_http_xslt_filter_module-debug.so
ngx_http_image_filter_module.so ngx_http_perl_module.so ngx_http_xslt_filter_module.so
ngx_http_image_filter_module-debug.so ngx_http_perl_module-debug.so ngx_http_xslt_filter_module-debug.so
ngx_http_image_filter_module.so ngx_http_perl_module.so ngx_http_xslt_filter_module.so
三个外部模块都安装成功了。
注意:debug结尾的是调试版的库,正式部署时加载不含debug的so即可。
如果文章对您有帮助,给个赞赏吧!