返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-07-19    美好的一天,从现在开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 108|回复: 0

[原创] 【原创】OnlyOffice-社区容器版强制升级nginx的一些事

[复制链接]
发表于 2026-6-23 15:49:45 | 显示全部楼层 |阅读模式

少侠不来段修仙之旅吗~

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
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会出现这条警告,为正常警告,无需理会
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表