|
OnlyOffice-社区版强制升级nginx的一些事
前言:某次漏洞扫描中,扫描出onlyoffice容器内部的nginx版本符合漏洞涉及版本,需要升级至最新版本,得,人家nginx封装是稳定版本,强制升级不知道有没有问题,那就升吧。
将容器放到外网运行,并在容器内执行以下命令:
一、更新apt库,顺便安装vi方便修改文件
apt update
apt install vi
二、确认目前的nginx版本
nginx -v
三、添加 Nginx 官方 APT 源
# 导入官方签名密钥
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
# 添加官方稳定版仓库(适用于 Ubuntu Noble)
echo "deb https://nginx.org/packages/ubuntu/ noble nginx" | tee /etc/apt/sources.list.d/nginx.list
四、建议先手动下载nginx安装包到/tmp路径下
cd /tmp/
apt download nginx=1.31.2-1~noble
五、备份nginx配置文件(非常重要)
cp -R /etc/nginx/ /etc/nginx.bakup/
六、尝试卸载nginx组件(有可能会提示组件不存在)
dpkg --force-depends --remove nginx-common
dpkg --force-depends --remove nginx
#使用apt卸载残余组件
sudo apt purge nginx nginx-common nginx-extras libnginx-mod-* 2>/dev/null || true
七、安装下载好的nginx
sudo dpkg -i ./nginx_1.31.2-1~noble_amd64.deb
八、回滚nginx配置
cp -R /etc/nginx.backup/ /etc/nginx/
九、确认nginx是否升级成功和配置文件是否正确读取
nginx -t
nginx -v
十、重新封装服务
# 先备份
mv /usr/sbin/service /usr/sbin/service.bak
# 创建新的 service 脚本
cat > /usr/sbin/service << 'EOF'
#!/bin/bash
# Simple wrapper to handle nginx service commands
if [ "$1" = "nginx" ]; then
case "$2" in
start)
/usr/sbin/nginx
exit $?
;;
stop)
/usr/sbin/nginx -s stop
exit $?
;;
reload|force-reload)
/usr/sbin/nginx -s reload
exit $?
;;
restart)
/usr/sbin/nginx -s stop
sleep 1
/usr/sbin/nginx
exit $?
;;
status)
if pgrep -x nginx > /dev/null; then
echo "nginx is running"
exit 0
else
echo "nginx is not running"
exit 1
fi
;;
*)
echo "Usage: service nginx {start|stop|reload|restart|status}"
exit 2
;;
esac
else
# 如果原 service 脚本存在且可执行,调用它处理其他服务
if [ -x /usr/sbin/service.bak ]; then
exec /usr/sbin/service.bak "$@"
else
echo "unrecognized service: $1"
exit 1
fi
fi
EOF
chmod +x /usr/sbin/service
十一、使用服务启动nginx
service nginx start # 应该静默启动
service nginx status # 应显示 running
nginx -t # 检查配置
十二、(可选)使用守护进程封装nginx(推荐做,否则重启容器时可能不会自动启动,但后续管理启动停止nginx就只能使用supervisorctl start nginx、supervisorctl stop nginx)
cat > /etc/supervisor/conf.d/nginx.conf << 'EOF'
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
priority=100
stdout_logfile=/var/log/supervisor/nginx.log
stderr_logfile=/var/log/supervisor/nginx.err.log
user=root
EOF
# 重新加载 Supervisor
supervisorctl reread
supervisorctl update
# 测试nginx是否能正常启动和停止
supervisorctl start nginx
supervisorctl stop nginx
十三、重启整个容器,并验证服务
# 退出容器
exit
docker restart onlyoffice-ce
# 关注日志,如没有报错,请在浏览器验证是否能正常访问
docker logs -f onlyoffice-ce
注:nginx: [warn] duplicate extension "wasm", content type: "application/wasm", previous content type: "application/wasm" in /etc/nginx/mime.types:74 升级后启动nginx会出现这条警告,为正常警告,无需理会
|