diff --git a/install.sh b/install.sh index 5a9fcda..2e058ee 100644 --- a/install.sh +++ b/install.sh @@ -2307,6 +2307,23 @@ restart_nginx_safe() { fi fi + # 宝塔路径优先尝试 + if [[ -x /www/server/nginx/sbin/nginx ]]; then + if /www/server/nginx/sbin/nginx -t 2>/dev/null; then + if /www/server/nginx/sbin/nginx -s reload 2>/dev/null; then + print_success "已通过宝塔 nginx -s reload 重载" + return 0 + fi + if /www/server/nginx/sbin/nginx 2>/dev/null; then + print_success "已通过宝塔 nginx 启动" + return 0 + fi + else + print_error "宝塔 Nginx 配置测试失败" + /www/server/nginx/sbin/nginx -t 2>&1 || true + fi + fi + # 直接使用nginx命令 if command -v nginx &> /dev/null; then if ! nginx -t 2>/dev/null; then @@ -2331,10 +2348,36 @@ restart_nginx_safe() { return 1 } +# 确保已安装Nginx(更新/修复模式下可能未安装) +ensure_nginx_installed() { + if command -v nginx &> /dev/null || [[ -x /www/server/nginx/sbin/nginx ]]; then + return 0 + fi + + print_step "未检测到 Nginx,开始安装..." + + case "$PKG_MANAGER" in + apt) install_nginx_apt ;; + yum) install_nginx_yum ;; + dnf) install_nginx_dnf ;; + zypper) install_nginx_zypper ;; + *) print_error "无法自动安装Nginx,请手动安装"; return 1 ;; + esac + + # 安装后再次检测 + if ! command -v nginx &> /dev/null && [[ ! -x /www/server/nginx/sbin/nginx ]]; then + print_error "Nginx安装失败,请手动安装" + return 1 + fi +} + # 步骤1: 先配置HTTP Nginx(为SSL证书验证做准备) configure_nginx_http_first() { print_step "配置基础HTTP Nginx(用于SSL证书验证)..." + # 确保已安装Nginx + ensure_nginx_installed || return 1 + # 总是先配置HTTP模式 local server_name="${DOMAIN:-_}" @@ -2634,6 +2677,9 @@ configure_nginx() { configure_nginx_http() { local server_name="${DOMAIN:-_}" + # 确保已安装Nginx + ensure_nginx_installed || return 1 + # 检测Nginx配置目录结构并创建必要的目录 if [[ -d /www/server/nginx ]]; then # 宝塔面板 @@ -2750,6 +2796,9 @@ EOF } configure_nginx_https() { + # 确保已安装Nginx + ensure_nginx_installed || return 1 + # 检测Nginx配置目录结构并创建必要的目录 if [[ -d /www/server/nginx ]]; then # 宝塔面板