Ubuntu 18.04升级Nginx到1.20稳定版,重装模块时退回1.18怎么办
问题根因
你安装的Nginx 1.20.1不属于Ubuntu 18.04官方源的软件包,而官方源提供的libnginx-mod-*系列模块包依赖规则严格绑定官方源的Nginx 1.18版本,直接安装官方模块包时,apt会自动将Nginx降级到满足依赖要求的1.18版本。
可用解决方案
方案一:安装Nginx同源预编译模块
如果你的Nginx 1.20.1是从Nginx官方稳定源安装,可直接安装该源提供的对应版本模块,无需编译:
- 首先确认Nginx官方源已正确配置,查看源配置文件内容:
cat /etc/apt/sources.list.d/nginx.list
正常配置应包含针对Ubuntu 18.04(bionic)的稳定版源地址 - 更新apt缓存后安装对应模块,Nginx官方源的模块包命名无
lib前缀:sudo apt updatesudo apt install -y nginx-module-http-auth-pam nginx-module-http-cache-purge nginx-module-http-dav-ext - 安装完成后在Nginx主配置文件顶部添加加载模块的配置:
load_module modules/ngx_http_auth_pam_module.so;
load_module modules/ngx_http_cache_purge_module.so;
load_module modules/ngx_http_dav_ext_module.so;
- 校验配置无误后重载Nginx生效:
sudo nginx -t && sudo nginx -s reload
方案二:手动编译匹配版本的动态模块
如果找不到对应1.20.1版本的预编译模块包,可手动编译和当前Nginx版本完全匹配的动态模块:
- 先安装编译所需的依赖工具和库:
sudo apt install -y build-essential libpam-dev libexpat-dev - 下载和当前安装版本完全一致的Nginx源码包并解压:
wget http://nginx.org/download/nginx-1.20.1.tar.gztar -zxf nginx-1.20.1.tar.gz && cd nginx-1.20.1 - 分别下载三个目标模块的官方稳定版源码到当前目录
- 获取当前Nginx的编译参数,配置模块编译规则:
NGINX_CONF_ARGS=$(nginx -V 2>&1 | grep -oP 'configure arguments: \K.*')./configure $NGINX_CONF_ARGS --add-dynamic-module=./ngx_http_auth_pam_module --add-dynamic-module=./ngx_cache_purge --add-dynamic-module=./nginx-dav-ext-module - 仅编译模块,无需安装完整Nginx:
make modules - 将编译生成的
.so模块文件复制到Nginx的模块目录:sudo cp objs/*.so /etc/nginx/modules/ - 参考方案一的步骤在Nginx配置中加载模块,重载后即可使用
方案三:版本锁定后强制安装(不推荐)
仅用于临时测试场景,该方案可能出现模块和Nginx版本不兼容的情况,引发服务异常:
- 先锁定Nginx版本,避免被apt自动降级:
sudo apt-mark hold nginx - 强制忽略依赖安装官方模块包:
sudo apt install -y --force-depends libnginx-mod-http-auth-pam libnginx-mod-http-cache-purge libnginx-mod-http-dav-ext
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

