宝塔升级openssl版本-itbaihui.com在使用宝塔时候,预编译的nginx使用的版本比较低,这是宝塔为了平衡性能和兼容性才选择这样的吧。

在使用新版本为了支持https3或者开启quic的时候低版本openssl就不适合了。而宝塔面版预编译和编译安装的版本都是1.1.1q的版本,且不是使用系统的openssl而是为nginx单独编译的,为此曾经还纠结过要不要升级。经过一番折腾终于弄好了,在保证和宝塔面板兼容的前提下修改宝塔的nginx安装脚本实现,安装了最新的openssl版本后的就这个样子:

[root@hostlocal-SG-27-08-15 ~]# nginx -V
nginx version: nginx/1.26.3
built by gcc 11.5.0 20240719 (Red Hat 11.5.0-11) (GCC)
built with OpenSSL 3.6.0 1 Oct 2025
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module-ng-1.3.0 --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt='-Wno-error -DOPENSSL_API_COMPAT=10100' --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_v3_module

具体步骤:

  1. 工作目录切换到/www/server/panel/install/
    进入宝塔面板的安装文件夹: 打开终端,进入宝塔面板的安装目录,通常路径为 /www/server/panel/install/
  2. 获取宝塔编译安装脚本
    wget http://download.bt.cn/install/0/nginx.sh
  3. 把下载的这个nginx.sh改个名字如:nginx_quic.sh
  4. 修改nginx_quic.sh代码中openssl下载相关Download_Src()函数中的代码。
    Download_Src() {
        mkdir -p ${Setup_Path}
        cd ${Setup_Path}
        rm -rf ${Setup_Path}/src
        
        if [ "${version}" == "tengine" ] || [ "${version}" == "openresty" ]; then
            wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/${version}-${nginxVersion}.tar.gz -T20
            tar -xvf src.tar.gz
            mv ${version}-${nginxVersion} src
        elif [ "${version}" == "openresty127" ]; then
            wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/openresty-${nginxVersion}.tar.gz -T20
            tar -xvf src.tar.gz
            mv openresty-${nginxVersion} src
        else
            wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/nginx-${nginxVersion}.tar.gz -T20
            tar -xvf src.tar.gz
            mv nginx-${nginxVersion} src
        fi
    
        cd src
    
        if [ -z "${GMSSL}" ]; then
        echo "==================== 开始下载 OpenSSL ===================="
        
        # ========== 检查是否指定了自定义 OpenSSL 版本 ==========
        if [ ! -z "${CUSTOM_OPENSSL_VERSION}" ]; then
            if [ "${CUSTOM_OPENSSL_VERSION}" == "latest" ]; then
                echo "用户指定使用最新版本 OpenSSL"
                USE_LATEST=1
            else
                echo "用户指定 OpenSSL 版本: ${CUSTOM_OPENSSL_VERSION}"
                opensslVer="${CUSTOM_OPENSSL_VERSION}"
                USE_CUSTOM=1
            fi
        fi
        # =====================================================
        
        # 如果没有指定自定义版本或指定了 latest,则获取最新版本
        if [ -z "${USE_CUSTOM}" ]; then
            LATEST_OPENSSL_JSON=$(curl -s --connect-timeout 10 https://api.github.com/repos/openssl/openssl/releases/latest)
            LATEST_OPENSSL_TAG=$(echo ${LATEST_OPENSSL_JSON} | grep '"tag_name":' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
            
            # 确定要使用的版本
            if [ ! -z "${LATEST_OPENSSL_TAG}" ]; then
                opensslVer=$(echo ${LATEST_OPENSSL_TAG} | sed 's/openssl-//')
                echo "检测到 GitHub 最新版本: ${opensslVer}"
            else
                # 如果获取失败,使用当前最新稳定版
                opensslVer="3.2.1"
                echo "使用默认最新稳定版本: ${opensslVer}"
            fi
        else
            echo "使用自定义版本: ${opensslVer}"
        fi
        
        # 根据 nginx 版本选择合适的 OpenSSL 版本
        TLSv13_NGINX=$(echo ${nginxVersion} | tr -d '.' | cut -c 1-3)
        if [ "${TLSv13_NGINX}" -lt "115" ] || [ "${TLSv13_NGINX}" == "181" ]; then
            echo "检测到旧版本 Nginx (${nginxVersion}),OpenSSL 可能需要 1.1.x 分支"
            echo "但仍尝试使用最新版本,如编译失败会自动降级"
        fi
        
        # 尝试下载
        download_success=0
        
        # 方法1: 从官方源下载
        echo "尝试从 OpenSSL 官方源下载..."
        wget -O openssl.tar.gz https://www.openssl.org/source/openssl-${opensslVer}.tar.gz -T 30
        if [ $? -eq 0 ] && [ -f "openssl.tar.gz" ]; then
            download_success=1
            echo "✓ 官方源下载成功"
        fi
        
        # 方法2: 如果官方源失败,从 GitHub 下载
        if [ ${download_success} -eq 0 ] && [ ! -z "${LATEST_OPENSSL_TAG}" ]; then
            echo "官方源失败,尝试从 GitHub 下载..."
            wget -O openssl.tar.gz https://github.com/openssl/openssl/archive/refs/tags/${LATEST_OPENSSL_TAG}.tar.gz -T 30
            if [ $? -eq 0 ] && [ -f "openssl.tar.gz" ]; then
                download_success=1
                echo "✓ GitHub 源下载成功"
            fi
        fi
        
        # 方法3: 如果都失败,使用镜像源
        if [ ${download_success} -eq 0 ]; then
            echo "GitHub 失败,尝试从镜像源下载 3.0.18..."
            opensslVer="3.0.18"
            wget -O openssl.tar.gz https://github.com/openssl/openssl/releases/download/openssl-${opensslVer}/openssl-${opensslVer}.tar.gz -T 30
            if [ $? -eq 0 ] && [ -f "openssl.tar.gz" ]; then
                download_success=1
                echo "✓ 镜像源下载成功"
            fi
        fi
        
        # 检查下载是否成功
        if [ ${download_success} -eq 0 ]; then
            echo "✗ 所有下载方法失败,使用原脚本的备用版本"
            # 保留原脚本的逻辑作为最终备用
            if [ "${TLSv13_NGINX}" -ge "115" ] && [ "${TLSv13_NGINX}" != "181" ]; then
                opensslVer="1.1.1w"
            else
                opensslVer="1.0.2u"
            fi
            wget -O openssl.tar.gz ${download_Url}/src/openssl-${opensslVer}.tar.gz
        fi
        
        # 解压并重命名
        echo "正在解压 OpenSSL..."
        tar -xzf openssl.tar.gz
        if [ $? -ne 0 ]; then
            echo "✗ 解压失败,请检查下载的文件"
            exit 1
        fi
        
        # 获取解压后的目录名并重命名为 openssl
        OPENSSL_DIR=$(tar -tzf openssl.tar.gz | head -1 | cut -f1 -d"/")
        if [ -d "${OPENSSL_DIR}" ]; then
            mv ${OPENSSL_DIR} openssl
            echo "✓ OpenSSL 目录已重命名"
        else
            echo "✗ 找不到解压目录: ${OPENSSL_DIR}"
            exit 1
        fi
        rm -f openssl.tar.gz
        
        # 显示版本信息
        echo "==================== OpenSSL 版本信息 ===================="
        if [ -f "openssl/VERSION.dat" ]; then
            cat openssl/VERSION.dat
        elif [ -f "openssl/VERSION" ]; then
            cat openssl/VERSION
        elif [ -f "openssl/VERSION.txt" ]; then
            cat openssl/VERSION.txt
        else
            echo "版本: ${opensslVer}"
        fi
        
        # 检查关键文件
        if [ ! -f "openssl/Configure" ] && [ ! -f "openssl/config" ]; then
            echo "✗ 警告: 找不到 OpenSSL Configure 或 config 文件"
            ls -la openssl/ | head -20
            echo "尝试继续编译,但可能会失败..."
        else
            echo "✓ OpenSSL 源码验证通过"
        fi
        echo "=========================================================="
        
    else
        # 国密版本保持不变
        wget -O GmSSL-master.zip ${download_Url}/src/GmSSL-master.zip
        unzip GmSSL-master.zip
        mv GmSSL-master openssl
        rm -f GmSSL-master.zip
    fi
    
        # ========== 以下代码保持不变 ==========
        pcre_version="8.43"
        wget -O pcre-$pcre_version.tar.gz ${download_Url}/src/pcre-$pcre_version.tar.gz
        tar zxf pcre-$pcre_version.tar.gz
    
        wget -O ngx_cache_purge.tar.gz ${download_Url}/src/ngx_cache_purge-2.3.tar.gz
        tar -zxvf ngx_cache_purge.tar.gz
        mv ngx_cache_purge-2.3 ngx_cache_purge
        rm -f ngx_cache_purge.tar.gz
    
        wget -O nginx-sticky-module-ng-1.3.0.zip ${download_Url}/src/nginx-sticky-module-ng-1.3.0.zip
        unzip -o nginx-sticky-module-ng-1.3.0.zip
        rm -f nginx-sticky-module-ng-1.3.0.zip
    
        wget -O nginx-http-concat.zip ${download_Url}/src/nginx-http-concat-1.2.2.zip
        unzip -o nginx-http-concat.zip
        mv nginx-http-concat-1.2.2 nginx-http-concat
        rm -f nginx-http-concat.zip
    
        #lua_nginx_module
        LuaModVer="0.10.13"
        if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ] ||  [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
            LuaModVer="0.10.24"
        fi
        wget -c -O lua-nginx-module-${LuaModVer}.zip ${download_Url}/src/lua-nginx-module-${LuaModVer}.zip
        unzip -o lua-nginx-module-${LuaModVer}.zip
        mv lua-nginx-module-${LuaModVer} lua_nginx_module
        rm -f lua-nginx-module-${LuaModVer}.zip
    
        #ngx_devel_kit
        NgxDevelKitVer="0.3.1"
        wget -c -O ngx_devel_kit-${NgxDevelKitVer}.zip ${download_Url}/src/ngx_devel_kit-${NgxDevelKitVer}.zip
        unzip -o ngx_devel_kit-${NgxDevelKitVer}.zip
        mv ngx_devel_kit-${NgxDevelKitVer} ngx_devel_kit
        rm -f ngx_devel_kit-${NgxDevelKitVer}.zip
    
        #nginx-dav-ext-module
        NgxDavVer="3.0.0"
        wget -c -O nginx-dav-ext-module-${NgxDavVer}.tar.gz ${download_Url}/src/nginx-dav-ext-module-${NgxDavVer}.tar.gz
        tar -xvf nginx-dav-ext-module-${NgxDavVer}.tar.gz
        mv nginx-dav-ext-module-${NgxDavVer} nginx-dav-ext-module
        rm -f nginx-dav-ext-module-${NgxDavVer}.tar.gz
        
        wget -c -O ngx_http_substitutions_filter_module-master.zip ${download_Url}/src/ngx_http_substitutions_filter_module-master.zip
        unzip -o ngx_http_substitutions_filter_module-master.zip
        rm -f ngx_http_substitutions_filter_module-master.zip
    
        if [ "${Is_64bit}" = "64" ]; then
            if [ "${version}" == "1.15" ] || [ "${version}" == "1.17" ] || [ "${version}" == "tengine" ]; then
                NGX_PAGESPEED_VAR="1.13.35.2"
                wget -O ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz ${download_Url}/src/ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz
                tar -xvf ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz
                mv ngx-pagespeed-${NGX_PAGESPEED_VAR} ngx-pagespeed
                rm -f ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz
            fi
        fi
    }
  5. 执行bash nginx_quic.sh install 1.26
    宝塔这个编译脚本是带参数执行的后面的1.26是nginx的版本号。注意如果原来已经安装了nginx就先到宝塔的软件商店先卸载了再安装。
  6. 如果需更多模块如http_auth_request、secure_link等需要修改Install_Configure()在./configure后面添加对应模块(部分第三方需要先下载后才能编译进去)。例如:找到用于配置编译选项的部分(通常是以 ./configure 开头的行)。在该行的末尾添加:--with-http_secure_link_module
    以启用 secure_link 模块。
  7. 最后附上一份自己修改好的安装脚本完整代码。添加了帮助说明,使用bash nginx_quic.sh -h显示帮助,添加了一个openssl版本选择参数(留空默认最新版本),为方便需要指定安装openssl版添加的。使用时候:`bash nginx_quic.sh install 1.26 1.1.1w`。附openssl版本列表:https://openssl-library.org/source/old/index.html
  8. 一份修改好的完整nginx编译安装脚本(适用宝塔面板)
    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    LANG=en_US.UTF-8
    public_file=/www/server/panel/install/public.sh
    . $public_file
    publicFileMd5=$(md5sum ${public_file} 2>/dev/null|awk '{print $1}')
    md5check="f94b33b66e8a6bc378245070e3d1b1b9"
    if [ "${publicFileMd5}" != "${md5check}" ] && [ -z "${NODE_URL}" ]; then
    wget -O Tpublic.sh https://download.bt.cn/install/public.sh -T 20;
    publicFileMd5=$(md5sum Tpublic.sh 2>/dev/null|awk '{print $1}')
    if [ "${publicFileMd5}" == "${md5check}" ]; then
    \cp -rpa Tpublic.sh $public_file
    fi
    rm -f Tpublic.sh
    . $public_file
    fi
    
    download_Url=$NODE_URL
    
    tengine='3.1.0'
    nginx_108='1.8.1'
    nginx_112='1.12.2'
    nginx_114='1.14.2'
    nginx_115='1.15.10'
    nginx_116='1.16.1'
    nginx_117='1.17.10'
    nginx_118='1.18.0'
    nginx_119='1.19.8'
    nginx_120='1.20.2'
    nginx_121='1.21.4'
    nginx_122='1.22.1'
    nginx_123='1.23.4'
    nginx_124='1.24.0'
    nginx_125='1.25.5'
    nginx_126='1.26.3'
    nginx_127='1.27.4'
    nginx_128='1.28.0'
    openresty='1.25.3.2'
    openresty127='1.27.1.2'
    
    Root_Path=$(cat /var/bt_setupPath.conf)
    # 接收第三个参数作为自定义 OpenSSL 版本
    CUSTOM_OPENSSL_VERSION=$3
    Setup_Path=$Root_Path/server/nginx
    run_path="/root"
    Is_64bit=$(getconf LONG_BIT)
    
    ARM_CHECK=$(uname -a | grep -E 'aarch64|arm|ARM')
    if [ "$2" == "1.24" ];then
    ARM_CHECK=""
    JEM_CHECK="disable"
    fi
    LUAJIT_VER="2.0.4"
    LUAJIT_INC_PATH="luajit-2.0"
    
    if [ "${ARM_CHECK}" ]; then
    LUAJIT_VER="2.1.0-beta3"
    LUAJIT_INC_PATH="luajit-2.1"
    fi
    
    loongarch64Check=$(uname -a | grep loongarch64)
    if [ "${loongarch64Check}" ]; then
    wget -O nginx.sh ${download_Url}/install/0/loongarch64/nginx.sh && sh nginx.sh $1 $2
    exit
    fi
    # 显示使用帮助
    if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
    echo "=========================================="
    echo "用法: bash nginx.sh <操作> <nginx版本> [openssl版本]"
    echo ""
    echo "示例:"
    echo " bash nginx.sh install 1.26 # 自动选择 OpenSSL"
    echo " bash nginx.sh install 1.26 latest # 使用最新 OpenSSL"
    echo " bash nginx.sh install 1.26 1.1.1w # 使用 OpenSSL 1.1.1w"
    echo " bash nginx.sh install 1.26 3.0.18 # 使用 OpenSSL 3.0.18"
    echo "=========================================="
    exit 0
    fi
    
    Set_Centos7_Repo(){
    if [ -f "/etc/yum.repos.d/docker-ce.repo" ];then
    mv /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce.repo_backup
    fi
    MIRROR_CHECK=$(cat /etc/yum.repos.d/CentOS-Base.repo |grep "[^#]mirror.centos.org")
    if [ "${MIRROR_CHECK}" ] && [ "${is64bit}" == "64" ];then
    \cp -rpa /etc/yum.repos.d/ /etc/yumBak
    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
    fi
    
    TSU_MIRROR_CHECK=$(cat /etc/yum.repos.d/CentOS-Base.repo |grep "tuna.tsinghua.edu.cn")
    if [ "${TSU_MIRROR_CHECK}" ];then
    \cp -rpa /etc/yum.repos.d/ /etc/yumBak
    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
    sed -i 's|#baseurl=https://mirrors.tuna.tsinghua.edu.cn|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
    sed -i 's|#baseurl=http://mirrors.tuna.tsinghua.edu.cn|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
    fi
    
    ALI_CLOUD_CHECK=$(grep Alibaba /etc/motd)
    Tencent_Cloud=$(cat /etc/hostname |grep -E VM-[0-9]+-[0-9]+)
    if [ "${ALI_CLOUD_CHECK}" ] || [ "${Tencent_Cloud}" ];then
    return
    fi
    
    yum install tree -y
    if [ "$?" != "0" ] ;then
    TAR_CHECK=$(which tree)
    if [ "$?" == "0" ] ;then
    \cp -rpa /etc/yum.repos.d/ /etc/yumBak
    if [ -z "${download_Url}" ];then
    download_Url="http://download.bt.cn"
    fi
    curl -Ss --connect-timeout 5 -m 60 -O ${download_Url}/src/el7repo.tar.gz
    rm -f /etc/yum.repos.d/*.repo
    tar -xvzf el7repo.tar.gz -C /etc/yum.repos.d/
    fi
    fi
    
    yum install tree -y
    if [ "$?" != "0" ] ;then
    sed -i "s/vault.epel.cloud/mirrors.cloud.tencent.com/g" /etc/yum.repos.d/*.repo
    fi
    }
    
    Centos7Check=$(cat /etc/redhat-release | grep ' 7.' | grep -iE 'centos|Red Hat')
    if [ "${Centos7Check}" ];then
    Set_Centos7_Repo
    fi
    
    if [ -z "${cpuCore}" ]; then
    cpuCore="1"
    fi
    
    Error_Send(){
    MIN_O=$(date +%M)
    if [ $((MIN_O % 2)) -eq 0 ]; then
    exit 1
    fi
    if [ ! -f "/tmp/nginx_i.pl" ];then
    touch /tmp/nginx_i.pl
    TIME=$(date "+%Y-%m-%d %H:%M:%S")
    P_VERSION=$(cat /www/server/panel/class/common.py|grep g.version|grep -oE 8.0.[0-9]+)
    ls /etc/init.d/ | xargs -n 5 | pr -t -5 > /tmp/nginx_err.pl
    cat /tmp/pack_i.pl >> /tmp/nginx_err.pl
    cat /tmp/gd_i.pl >> /tmp/nginx_err.pl
    tail -n 15 /tmp/nginx_config.pl /tmp/nginx_make.pl /tmp/nginx_install.pl >> /tmp/nginx_err.pl
    echo Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO} gcc:${GCC_VER} cmake:${CMAKE_VER} >> /tmp/nginx_err.pl
    echo ${SYS_VERSION} ${SYS_INFO} >> /tmp/nginx_err.pl
    echo "$nginxVersion install Failed" >> /tmp/nginx_err.pl
    ERR_MSG=$(cat /tmp/nginx_err.pl)
    rm -f /tmp/nginx_config.pl /tmp/nginx_make.pl /tmp/nginx_install.pl /tmp/nginx_err.pl /tmp/pack_i.pl /tmp/gd_i.pl
    curl --request POST \
    --url "http://api.bt.cn/bt_error/index.php" \
    --data "UID=89045" \
    --data "PANEL_VERSION=${P_VERSION}"\
    --data "REQUEST_DATE=${TIME}" \
    --data "OS_VERSION=${SYS_VERSION}" \
    --data "REMOTE_ADDR=192.168.168.1641" \
    --data "REQUEST_URI=nginx" \
    --data "USER_AGENT=${SYS_INFO}" \
    --data "ERROR_INFO=${ERR_MSG}" \
    --data "PACK_TIME=${TIME}" \
    --data "TYPE=3"
    fi
    exit 1
    }
    
    System_Lib() {
    if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
    Pack="gcc gcc-c++ curl curl-devel libtermcap-devel ncurses-devel libevent-devel readline-devel libuuid-devel gd-devel libxml2-devel libxslt-devel"
    ${PM} install ${Pack} -y
    yum install zlib-devel -y
    yum -y install gcc gcc-c++ autoconf automake
    yum reinstall gd gd-devel -y 2>&1 >> /tmp/pack_i.pl
    ls /usr/include/gd.h /usr/lib64/libgd.so.3 2>&1 |tee /tmp/gd_i.pl
    wget -O fix_install.sh $download_Url/tools/fix_install.sh
    nohup bash fix_install.sh > /www/server/panel/install/fix.log 2>&1 &
    elif [ "${PM}" == "apt-get" ]; then
    apt-get update
    LIBCURL_VER=$(dpkg -l | grep libx11-6 | awk '{print $3}')
    if [ "${LIBCURL_VER}" == "2:1.6.9-2ubuntu1.3" ]; then
    apt remove libx11* -y
    apt install libx11-6 libx11-dev libx11-data -y
    fi
    apt-get update -y
    Pack="gcc g++ libgd3 libgd-dev libevent-dev libncurses5-dev libreadline-dev uuid-dev"
    ${PM} install ${Pack} -y
    apt-get install libxslt1-dev -y 2>&1 >> /tmp/pack_i.pl
    apt-get install libgd-dev -y 2>&1 >> /tmp/pack_i.pl
    apt-get install libxml2-dev -y 2>&1 >> /tmp/pack_i.pl
    apt-get install zlib1g-dev -y
    fi
    
    }
    
    Service_Add() {
    if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
    chkconfig --add nginx
    chkconfig --level 2345 nginx on
    elif [ "${PM}" == "apt-get" ]; then
    update-rc.d nginx defaults
    fi
    if [ "$?" == "127" ];then
    wget -O /usr/lib/systemd/system/nginx.service ${download_Url}/init/systemd/nginx.service
    systemctl enable nginx.service
    fi
    }
    
    Service_Del() {
    if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
    chkconfig --del nginx
    chkconfig --level 2345 nginx off
    elif [ "${PM}" == "apt-get" ]; then
    update-rc.d nginx remove
    fi
    }
    
    Set_Time() {
    BASH_DATE=$(stat nginx.sh | grep Modify | awk '{print $2}' | tr -d '-')
    SYS_DATE=$(date +%Y%m%d)
    [ "${SYS_DATE}" -lt "${BASH_DATE}" ] && date -s "$(curl https://www.bt.cn//api/index/get_date)"
    }
    
    Install_Jemalloc() {
    if [ ! -f '/usr/local/lib/libjemalloc.so' ]; then
    wget -O jemalloc-5.0.1.tar.bz2 ${download_Url}/src/jemalloc-5.0.1.tar.bz2
    tar -xvf jemalloc-5.0.1.tar.bz2
    cd jemalloc-5.0.1
    ./configure
    make && make install
    ldconfig
    cd ..
    rm -rf jemalloc*
    fi
    }
    
    Install_LuaJIT2(){
    LUAJIT_INC_PATH="luajit-2.1"
    wget -c -O luajit2-2.1-20230410.zip ${download_Url}/src/luajit2-2.1-20230410.zip
    unzip -o luajit2-2.1-20230410.zip
    cd luajit2-2.1-20230410
    make -j${cpuCore}
    make install
    cd ..
    rm -rf luajit2-2.1-20230410*
    ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/local/lib64/libluajit-5.1.so.2
    LD_SO_CHECK=$(cat /etc/ld.so.conf|grep /usr/local/lib)
    if [ -z "${LD_SO_CHECK}" ];then
    echo "/usr/local/lib" >>/etc/ld.so.conf
    fi
    ldconfig
    }
    
    Install_LuaJIT() {
    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ] || [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ] || [ "${version}" == "openresty127" ];then
    Install_LuaJIT2
    return
    fi
    OEPN_LUAJIT=$(cat /usr/local/include/luajit-2.1/luajit.h|grep 2022)
    if [ ! -f '/usr/local/lib/libluajit-5.1.so' ] || [ ! -f "/usr/local/include/${LUAJIT_INC_PATH}/luajit.h" ] || [ "${OEPN_LUAJIT}" ]; then
    wget -c -O LuaJIT-${LUAJIT_VER}.tar.gz ${download_Url}/install/src/LuaJIT-${LUAJIT_VER}.tar.gz -T 10
    tar xvf LuaJIT-${LUAJIT_VER}.tar.gz
    cd LuaJIT-${LUAJIT_VER}
    make linux
    make install
    cd ..
    rm -rf LuaJIT-*
    export LUAJIT_LIB=/usr/local/lib
    export LUAJIT_INC=/usr/local/include/${LUAJIT_INC_PATH}/
    ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/local/lib64/libluajit-5.1.so.2
    LD_SO_CHECK=$(cat /etc/ld.so.conf|grep /usr/local/lib)
    if [ -z "${LD_SO_CHECK}" ];then
    echo "/usr/local/lib" >>/etc/ld.so.conf
    fi
    ldconfig
    fi
    }
    Install_cjson() {
    if [ ! -f /usr/local/lib/lua/5.1/cjson.so ]; then
    wget -O lua-cjson-2.1.0.tar.gz $download_Url/install/src/lua-cjson-2.1.0.tar.gz -T 20
    tar xvf lua-cjson-2.1.0.tar.gz
    rm -f lua-cjson-2.1.0.tar.gz
    cd lua-cjson-2.1.0
    make
    make install
    cd ..
    rm -rf lua-cjson-2.1.0
    fi
    }
    Download_Src() {
    mkdir -p ${Setup_Path}
    cd ${Setup_Path}
    rm -rf ${Setup_Path}/src
    
    if [ "${version}" == "tengine" ] || [ "${version}" == "openresty" ]; then
    wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/${version}-${nginxVersion}.tar.gz -T20
    tar -xvf src.tar.gz
    mv ${version}-${nginxVersion} src
    elif [ "${version}" == "openresty127" ]; then
    wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/openresty-${nginxVersion}.tar.gz -T20
    tar -xvf src.tar.gz
    mv openresty-${nginxVersion} src
    else
    wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/nginx-${nginxVersion}.tar.gz -T20
    tar -xvf src.tar.gz
    mv nginx-${nginxVersion} src
    fi
    
    cd src
    
    if [ -z "${GMSSL}" ]; then
    echo "==================== 开始下载 OpenSSL ===================="
    
    # ========== 检查是否指定了自定义 OpenSSL 版本 ==========
    if [ ! -z "${CUSTOM_OPENSSL_VERSION}" ]; then
    if [ "${CUSTOM_OPENSSL_VERSION}" == "latest" ]; then
    echo "用户指定使用最新版本 OpenSSL"
    USE_LATEST=1
    else
    echo "用户指定 OpenSSL 版本: ${CUSTOM_OPENSSL_VERSION}"
    opensslVer="${CUSTOM_OPENSSL_VERSION}"
    USE_CUSTOM=1
    fi
    fi
    # =====================================================
    
    # 如果没有指定自定义版本或指定了 latest,则获取最新版本
    if [ -z "${USE_CUSTOM}" ]; then
    LATEST_OPENSSL_JSON=$(curl -s --connect-timeout 10 https://api.github.com/repos/openssl/openssl/releases/latest)
    LATEST_OPENSSL_TAG=$(echo ${LATEST_OPENSSL_JSON} | grep '"tag_name":' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
    
    # 确定要使用的版本
    if [ ! -z "${LATEST_OPENSSL_TAG}" ]; then
    opensslVer=$(echo ${LATEST_OPENSSL_TAG} | sed 's/openssl-//')
    echo "检测到 GitHub 最新版本: ${opensslVer}"
    else
    # 如果获取失败,使用当前最新稳定版
    opensslVer="3.2.1"
    echo "使用默认最新稳定版本: ${opensslVer}"
    fi
    else
    echo "使用自定义版本: ${opensslVer}"
    fi
    
    # 根据 nginx 版本选择合适的 OpenSSL 版本
    TLSv13_NGINX=$(echo ${nginxVersion} | tr -d '.' | cut -c 1-3)
    if [ "${TLSv13_NGINX}" -lt "115" ] || [ "${TLSv13_NGINX}" == "181" ]; then
    echo "检测到旧版本 Nginx (${nginxVersion}),OpenSSL 可能需要 1.1.x 分支"
    echo "但仍尝试使用最新版本,如编译失败会自动降级"
    fi
    
    # 尝试下载
    download_success=0
    
    # 方法1: 从官方源下载
    echo "尝试从 OpenSSL 官方源下载..."
    wget -O openssl.tar.gz https://www.openssl.org/source/openssl-${opensslVer}.tar.gz -T 30
    if [ $? -eq 0 ] && [ -f "openssl.tar.gz" ]; then
    download_success=1
    echo "✓ 官方源下载成功"
    fi
    
    # 方法2: 如果官方源失败,从 GitHub 下载
    if [ ${download_success} -eq 0 ] && [ ! -z "${LATEST_OPENSSL_TAG}" ]; then
    echo "官方源失败,尝试从 GitHub 下载..."
    wget -O openssl.tar.gz https://github.com/openssl/openssl/archive/refs/tags/${LATEST_OPENSSL_TAG}.tar.gz -T 30
    if [ $? -eq 0 ] && [ -f "openssl.tar.gz" ]; then
    download_success=1
    echo "✓ GitHub 源下载成功"
    fi
    fi
    
    # 方法3: 如果都失败,使用镜像源
    if [ ${download_success} -eq 0 ]; then
    echo "GitHub 失败,尝试从镜像源下载 3.0.18..."
    opensslVer="3.0.18"
    wget -O openssl.tar.gz https://github.com/openssl/openssl/releases/download/openssl-${opensslVer}/openssl-${opensslVer}.tar.gz -T 30
    if [ $? -eq 0 ] && [ -f "openssl.tar.gz" ]; then
    download_success=1
    echo "✓ 镜像源下载成功"
    fi
    fi
    
    # 检查下载是否成功
    if [ ${download_success} -eq 0 ]; then
    echo "✗ 所有下载方法失败,使用原脚本的备用版本"
    # 保留原脚本的逻辑作为最终备用
    if [ "${TLSv13_NGINX}" -ge "115" ] && [ "${TLSv13_NGINX}" != "181" ]; then
    opensslVer="1.1.1w"
    else
    opensslVer="1.0.2u"
    fi
    wget -O openssl.tar.gz ${download_Url}/src/openssl-${opensslVer}.tar.gz
    fi
    
    # 解压并重命名
    echo "正在解压 OpenSSL..."
    tar -xzf openssl.tar.gz
    if [ $? -ne 0 ]; then
    echo "✗ 解压失败,请检查下载的文件"
    exit 1
    fi
    
    # 获取解压后的目录名并重命名为 openssl
    OPENSSL_DIR=$(tar -tzf openssl.tar.gz | head -1 | cut -f1 -d"/")
    if [ -d "${OPENSSL_DIR}" ]; then
    mv ${OPENSSL_DIR} openssl
    echo "✓ OpenSSL 目录已重命名"
    else
    echo "✗ 找不到解压目录: ${OPENSSL_DIR}"
    exit 1
    fi
    rm -f openssl.tar.gz
    
    # 显示版本信息
    echo "==================== OpenSSL 版本信息 ===================="
    if [ -f "openssl/VERSION.dat" ]; then
    cat openssl/VERSION.dat
    elif [ -f "openssl/VERSION" ]; then
    cat openssl/VERSION
    elif [ -f "openssl/VERSION.txt" ]; then
    cat openssl/VERSION.txt
    else
    echo "版本: ${opensslVer}"
    fi
    
    # 检查关键文件
    if [ ! -f "openssl/Configure" ] && [ ! -f "openssl/config" ]; then
    echo "✗ 警告: 找不到 OpenSSL Configure 或 config 文件"
    ls -la openssl/ | head -20
    echo "尝试继续编译,但可能会失败..."
    else
    echo "✓ OpenSSL 源码验证通过"
    fi
    echo "=========================================================="
    
    else
    # 国密版本保持不变
    wget -O GmSSL-master.zip ${download_Url}/src/GmSSL-master.zip
    unzip GmSSL-master.zip
    mv GmSSL-master openssl
    rm -f GmSSL-master.zip
    fi
    
    # ========== 以下代码保持不变 ==========
    pcre_version="8.43"
    wget -O pcre-$pcre_version.tar.gz ${download_Url}/src/pcre-$pcre_version.tar.gz
    tar zxf pcre-$pcre_version.tar.gz
    
    wget -O ngx_cache_purge.tar.gz ${download_Url}/src/ngx_cache_purge-2.3.tar.gz
    tar -zxvf ngx_cache_purge.tar.gz
    mv ngx_cache_purge-2.3 ngx_cache_purge
    rm -f ngx_cache_purge.tar.gz
    
    wget -O nginx-sticky-module-ng-1.3.0.zip ${download_Url}/src/nginx-sticky-module-ng-1.3.0.zip
    unzip -o nginx-sticky-module-ng-1.3.0.zip
    rm -f nginx-sticky-module-ng-1.3.0.zip
    
    wget -O nginx-http-concat.zip ${download_Url}/src/nginx-http-concat-1.2.2.zip
    unzip -o nginx-http-concat.zip
    mv nginx-http-concat-1.2.2 nginx-http-concat
    rm -f nginx-http-concat.zip
    
    #lua_nginx_module
    LuaModVer="0.10.13"
    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ] || [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    LuaModVer="0.10.24"
    fi
    wget -c -O lua-nginx-module-${LuaModVer}.zip ${download_Url}/src/lua-nginx-module-${LuaModVer}.zip
    unzip -o lua-nginx-module-${LuaModVer}.zip
    mv lua-nginx-module-${LuaModVer} lua_nginx_module
    rm -f lua-nginx-module-${LuaModVer}.zip
    
    #ngx_devel_kit
    NgxDevelKitVer="0.3.1"
    wget -c -O ngx_devel_kit-${NgxDevelKitVer}.zip ${download_Url}/src/ngx_devel_kit-${NgxDevelKitVer}.zip
    unzip -o ngx_devel_kit-${NgxDevelKitVer}.zip
    mv ngx_devel_kit-${NgxDevelKitVer} ngx_devel_kit
    rm -f ngx_devel_kit-${NgxDevelKitVer}.zip
    
    #nginx-dav-ext-module
    NgxDavVer="3.0.0"
    wget -c -O nginx-dav-ext-module-${NgxDavVer}.tar.gz ${download_Url}/src/nginx-dav-ext-module-${NgxDavVer}.tar.gz
    tar -xvf nginx-dav-ext-module-${NgxDavVer}.tar.gz
    mv nginx-dav-ext-module-${NgxDavVer} nginx-dav-ext-module
    rm -f nginx-dav-ext-module-${NgxDavVer}.tar.gz
    
    wget -c -O ngx_http_substitutions_filter_module-master.zip ${download_Url}/src/ngx_http_substitutions_filter_module-master.zip
    unzip -o ngx_http_substitutions_filter_module-master.zip
    rm -f ngx_http_substitutions_filter_module-master.zip
    
    if [ "${Is_64bit}" = "64" ]; then
    if [ "${version}" == "1.15" ] || [ "${version}" == "1.17" ] || [ "${version}" == "tengine" ]; then
    NGX_PAGESPEED_VAR="1.13.35.2"
    wget -O ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz ${download_Url}/src/ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz
    tar -xvf ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz
    mv ngx-pagespeed-${NGX_PAGESPEED_VAR} ngx-pagespeed
    rm -f ngx-pagespeed-${NGX_PAGESPEED_VAR}.tar.gz
    fi
    fi
    }
    Install_Configure() {
    Run_User="www"
    wwwUser=$(cat /etc/passwd | grep www)
    if [ "${wwwUser}" == "" ]; then
    groupadd ${Run_User}
    useradd -s /sbin/nologin -g ${Run_User} ${Run_User}
    fi
    
    [ -f "/www/server/panel/install/nginx_prepare.sh" ] && . /www/server/panel/install/nginx_prepare.sh
    [ -f "/www/server/panel/install/nginx_configure.pl" ] && ADD_EXTENSION=$(cat /www/server/panel/install/nginx_configure.pl)
    if [ -f "/usr/local/lib/libjemalloc.so" ] && [ -z "${ARM_CHECK}" ] && [ -z "${JEM_CHECK}" ]; then
    jemallocLD="--with-ld-opt="-ljemalloc""
    fi
    
    if [ "${version}" == "1.8" ]; then
    ENABLE_HTTP2="--with-http_spdy_module"
    else
    ENABLE_HTTP2="--with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module"
    fi
    
    WebDav_NGINX=$(echo ${nginxVersion} | tr -d '.' | cut -c 1-3)
    if [ "${WebDav_NGINX}" -ge "114" ] && [ "${WebDav_NGINX}" != "181" ]; then
    ENABLE_WEBDAV="--with-http_dav_module --add-module=${Setup_Path}/src/nginx-dav-ext-module"
    fi
    
    if [ "${version}" == "openresty" ] || [ "${version}" == "openresty127" ]; then
    ENABLE_LUA="--with-luajit"
    elif [ -z "${ARM_CHECK}" ] && [ -f "/usr/local/include/${LUAJIT_INC_PATH}/luajit.h" ]; then
    ENABLE_LUA="--add-module=${Setup_Path}/src/ngx_devel_kit --add-module=${Setup_Path}/src/lua_nginx_module"
    fi
    
    ENABLE_STICKY="--add-module=${Setup_Path}/src/nginx-sticky-module-ng-1.3.0"
    # if [ "$version" == "1.23" ] || [ "$version" == "1.24" ] || [ "${version}" == "tengine" ] || [ "${version}" == "openresty" ] || [ "$version" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    # ENABLE_STICKY=""
    # fi
    
    if [ "$version" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ] || [ "${version}" == "openresty127" ];then
    ENABLE_HTTP3="--with-http_v3_module"
    fi
    
    name=nginx
    i_path=/www/server/panel/install/$name
    
    i_args=$(cat $i_path/config.pl | xargs)
    i_make_args=""
    for i_name in $i_args; do
    init_file=$i_path/$i_name/init.sh
    if [ -f $init_file ]; then
    bash $init_file
    fi
    
    args_file=$i_path/$i_name/args.pl
    if [ -f $args_file ]; then
    args_string=$(cat $args_file)
    i_make_args="$i_make_args $args_string"
    fi
    done
    
    cd ${Setup_Path}/src
    
    # if [ "${GMSSL}" ];then
    # sed -i "s/$OPENSSL\/.openssl\//$OPENSSL\//g" auto/lib/openssl/conf
    # fi
    
    export LUAJIT_LIB=/usr/local/lib
    export LUAJIT_INC=/usr/local/include/${LUAJIT_INC_PATH}/
    export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
    
    # ========== 添加 OpenSSL 版本检查 ==========
    OPENSSL_EXTRA_OPTS="" # 初始化为空
    if [ -f "${Setup_Path}/src/openssl/VERSION.dat" ]; then
    OPENSSL_MAJOR=$(grep "MAJOR=" ${Setup_Path}/src/openssl/VERSION.dat | cut -d= -f2)
    echo "检测到 OpenSSL 主版本: ${OPENSSL_MAJOR}"
    
    # OpenSSL 3.x 可能需要额外的编译参数
    if [ "${OPENSSL_MAJOR}" == "3" ]; then
    echo "使用 OpenSSL 3.x,添加兼容性参数"
    OPENSSL_EXTRA_OPTS="-DOPENSSL_API_COMPAT=10100"
    fi
    fi
    # ==========================================
    
    ./configure --user=www --group=www --prefix=${Setup_Path} \
    ${ENABLE_LUA} \
    --add-module=${Setup_Path}/src/ngx_cache_purge \
    ${ENABLE_STICKY} \
    --with-openssl=${Setup_Path}/src/openssl \
    --with-pcre=pcre-${pcre_version} \
    ${ENABLE_HTTP2} \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_image_filter_module \
    --with-http_gzip_static_module \
    --with-http_gunzip_module \
    --with-ipv6 \
    --with-http_sub_module \
    --with-http_flv_module \
    --with-http_addition_module \
    --with-http_realip_module \
    --with-http_mp4_module \
    --with-http_auth_request_module \
    --add-module=${Setup_Path}/src/ngx_http_substitutions_filter_module-master \
    --with-ld-opt="-Wl,-E" \
    --with-cc-opt="-Wno-error ${OPENSSL_EXTRA_OPTS}" \
    ${jemallocLD} \
    ${ENABLE_WEBDAV} \
    ${ENABLE_NGX_PAGESPEED} \
    ${ENABLE_HTTP3} \
    ${ADD_EXTENSION} \
    ${i_make_args} 2>&1 | tee /tmp/nginx_config.pl
    
    # ========== 添加编译错误检查 ==========
    if [ ${PIPESTATUS[0]} -ne 0 ]; then
    echo "✗ Configure 失败,检查是否是 OpenSSL 版本兼容性问题"
    
    # 检查是否是 OpenSSL 3.x 导致的问题
    if grep -q "OPENSSL" /tmp/nginx_config.pl; then
    echo "检测到 OpenSSL 相关错误,尝试降级到 1.1.1w..."
    cd ${Setup_Path}/src
    rm -rf openssl
    wget -O openssl.tar.gz ${download_Url}/src/openssl-1.1.1w.tar.gz
    tar -xzf openssl.tar.gz
    mv openssl-1.1.1w openssl
    rm -f openssl.tar.gz
    
    # 重新配置
    ./configure --user=www --group=www --prefix=${Setup_Path} \
    ${ENABLE_LUA} \
    --add-module=${Setup_Path}/src/ngx_cache_purge \
    ${ENABLE_STICKY} \
    --with-openssl=${Setup_Path}/src/openssl \
    --with-pcre=pcre-${pcre_version} \
    ${ENABLE_HTTP2} \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_image_filter_module \
    --with-http_gzip_static_module \
    --with-http_gunzip_module \
    --with-ipv6 \
    --with-http_sub_module \
    --with-http_flv_module \
    --with-http_addition_module \
    --with-http_realip_module \
    --with-http_mp4_module \
    --with-http_auth_request_module \
    --add-module=${Setup_Path}/src/ngx_http_substitutions_filter_module-master \
    --with-ld-opt="-Wl,-E" \
    --with-cc-opt="-Wno-error" \
    ${jemallocLD} \
    ${ENABLE_WEBDAV} \
    ${ENABLE_NGX_PAGESPEED} \
    ${ENABLE_HTTP3} \
    ${ADD_EXTENSION} \
    ${i_make_args} 2>&1 | tee /tmp/nginx_config_retry.pl
    fi
    fi
    # ======================================
    
    make -j${cpuCore} 2>&1 | tee /tmp/nginx_make.pl
    }
    Install_Nginx() {
    make install 2>&1|tee /tmp/nginx_install.pl
    if [ "${version}" == "openresty" ] || [ "${version}" == "openresty127" ]; then
    ln -sf /www/server/nginx/nginx/html /www/server/nginx/html
    ln -sf /www/server/nginx/nginx/conf /www/server/nginx/conf
    ln -sf /www/server/nginx/nginx/logs /www/server/nginx/logs
    ln -sf /www/server/nginx/nginx/sbin /www/server/nginx/sbin
    if [ -d "/www/server/btwaf" ]; then
    \cp -rpa /www/server/nginx/lualib/* /www/server/btwaf
    elif [ -d "/www/server/free_waf" ];then
    \cp -rpa /www/server/nginx/lualib/* /www/server/free_waf
    fi
    fi
    
    if [ ! -f "${Setup_Path}/sbin/nginx" ]; then
    echo '========================================================'
    GetSysInfo
    echo -e "ERROR: nginx-${nginxVersion} installation failed."
    if [ -z "${SYS_VERSION}" ];then
    echo -e "============================================"
    echo -e "检测到为非常用系统安装"
    echo -e "如无法正常安装,建议更换至Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板"
    echo -e "详情请查看系统兼容表:https://docs.qq.com/sheet/DUm54VUtyTVNlc21H?tab=BB08J2"
    echo -e "特殊情况可通过以下联系方式寻求安装协助情况"
    echo -e "============================================"
    fi
    echo -e "安装失败,请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
    rm -rf ${Setup_Path}
    
    if [ ! -f "/www/server/panel/install/nginx_down.pl" ];then
    FILE_KEY=("./configure: error: no /www/server/nginx/src/ngx_devel_kit/config was found" "./configure: No such file or directory" "./configure: error: no /www/server/nginx/src/ngx_http_substitutions_filter_module-master/config was found" "./configure: error: no /www/server/nginx/src/nginx-dav-ext-module/config was found" "auto/options: No such file or directory" "./configure: error: no /www/server/nginx/src/ngx_cache_purge/config was found" "/www/server/nginx/src/lua_nginx_module/config was found")
    for key in "${FILE_KEY[@]}"; do
    if grep -q "$key" /tmp/nginx_config.pl; then
    echo -e "检测到文件下载不完整导致安装失败,请尝试重新安装nginx看是否正常"
    echo -e "或使用极速安装看是否正常"
    touch /www/server/panel/install/nginx_down.pl
    exit 1
    fi
    done
    fi
    
    if [ "${i_make_args}" ];then
    echo -e "检测到使用自定义编译参数进行安装nginx"
    echo -e "请根据报错自行排查问题,或取消自定义编译参数重新安装"
    exit 1
    fi
    
    Centos8Check=$(cat /etc/redhat-release | grep ' 8.' | grep -iE 'centos')
    if [ "${Centos8Check}" ];then
    echo -e "Centos8官方已经停止支持"
    echo -e "如是新安装系统服务器建议更换至Centos-7/Debian-11/Ubuntu-22系统安装宝塔面板"
    exit 1
    fi
    
    WSL_CHECK=$(uname -a|grep Microsoft)
    if [ "${WSL_CHECK}" ];then
    echo -e "宝塔未兼容测试过Microsoft WSL子系统进行安装"
    echo -e "建议使用虚拟机安装ubuntu-22安装宝塔面板"
    exit 1
    fi
    VELINUX_CHECK=$(uname -a|grep velinux1)
    if [ "$VELINUX_CHECK" ];then
    echo -e "宝塔未兼容测试过velinux系统进行安装"
    echo -e "建议更换至Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板板"
    exit 1
    fi
    rockchip64_CHECK=$(uname -a|grep rockchip64)
    if [ "$VELINUX_CHECK" ];then
    echo -e "宝塔未兼容测试过rockchip64系统进行安装"
    echo -e "建议更换至Centos-7或Debian-10+或Ubuntu-20+服务器系统安装宝塔面板板"
    exit 1
    fi
    KALI_CHECK=$(uname -a|grep Kali)
    if [ "${WSL_CHECK}" ];then
    echo -e "宝塔未兼容测试过Kali系统进行安装"
    echo -e "建议更换至Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板板"
    exit 1
    fi
    ARMBIAN_CHECK=$(uname -a|grep Armbian)
    if [ "${ARMBIAN_CHECK}" ];then
    echo -e "宝塔未详细兼容测试过Armbian系统进行安装"
    echo -e "建议更换至Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板板"
    exit 1
    fi
    RJ3328_CHECK=$(uname -a|grep rk3328)
    if [ "${RJ3328_CHECK}" ];then
    echo -e "宝塔未兼容测试过电视盒子进行安装"
    echo -e "建议更换至Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板板"
    exit 1
    fi
    XIAOMI_CHECK=$(uname -a|grep xiaomi)
    if [ "${XIAOMI_CHECK}" ];then
    echo -e "宝塔未兼容测试过安卓手机进行安装"
    echo -e "建议更换至Centos-7或Debian-10+或Ubuntu-20+服务器系统安装宝塔面板板"
    exit 1
    fi
    if [ -f "/etc/redhat-release" ];then
    LINUX_KIT_CHECK=$(uname -a|grep linuxkit)
    if [ "${LINUX_KIT_CHECK}" ];then
    echo -e "宝塔未兼容测试过linuxkit(docker)环境下进行安装"
    echo -e "建议更换至服务器系统Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板板"
    exit 1
    fi
    BBR_CHECK=$(uname -a|grep bbrplus)
    if [ "${BBR_CHECK}" ];then
    echo -e "检测已使用bbr更新过内核,建议更新完内核再安装宝塔面板然后再安装软件"
    echo -e "或如需高版本内核,可使用Ubuntu-22/Debian-12进行安装宝塔面板"
    exit 1
    fi
    ELREPO_CHECK=$(uname -a|grep elrepo)
    if [ "${ELREPO_CHECK}" ];then
    echo -e "检测更新过内核,建议更新完内核在安装宝塔面板然后再安装软件"
    echo -e "或如需高版本内核,可使用Ubuntu-22/Debian-12进行安装宝塔面板"
    exit 1
    fi
    fi
    
    if [ "${PM}" == "apt-get" ];then
    UBUNTU_23_CHECK=$(cat /etc/issue|grep Ubuntu|grep 23)
    if [ "${UBUNTU_23_CHECK}" ];then
    echo -e "宝塔未兼容测试过Ubuntu-23(预览版)环境下进行安装"
    echo -e "建议更换至服务器系统Centos-7或Debian-12或Ubuntu-22系统安装宝塔面板板"
    exit 1
    fi
    DEBIAN_9_CHECK=$(cat /etc/issue|grep Debian|grep 9)
    if [ "${UBUNTU_23_CHECK}" ];then
    echo -e "Debian-9官方已经不在支持"
    echo -e "建议更换至服务器系统Centos-7或Debian-12或Ubuntu-22系统安装宝塔面板板"
    exit 1
    fi
    fi
    
    #Error_Send
    fi
    
    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ] || [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    wget -c -O lua-resty-core-0.1.26.zip ${download_Url}/src/lua-resty-core-0.1.26.zip
    unzip lua-resty-core-0.1.26.zip
    cd lua-resty-core-0.1.26
    make install PREFIX=/www/server/nginx
    cd ..
    rm -rf lua-resty-core-0.1.26*
    
    wget -c -O lua-resty-lrucache-0.13.zip ${download_Url}/src/lua-resty-lrucache-0.13.zip
    unzip lua-resty-lrucache-0.13.zip
    cd lua-resty-lrucache-0.13
    make install PREFIX=/www/server/nginx
    cd ..
    rm -rf lua-resty-core-0.1.26*
    
    fi
    
    \cp -rpa ${Setup_Path}/sbin/nginx /www/backup/nginxBak
    chmod -x /www/backup/nginxBak
    md5sum ${Setup_Path}/sbin/nginx > /www/server/panel/data/nginx_md5.pl
    ln -sf ${Setup_Path}/sbin/nginx /usr/bin/nginx
    rm -f ${Setup_Path}/conf/nginx.conf
    
    cd ${Setup_Path}
    rm -f src.tar.gz
    }
    Update_Nginx() {
    if [ "${nginxVersion}" = "openresty" ] || [ "${version}" == "openresty127" ]; then
    make install
    echo -e "done"
    nginx -v
    echo "${nginxVersion}" >${Setup_Path}/version.pl
    rm -f ${Setup_Path}/version_check.pl
    exit
    fi
    if [ ! -f ${Setup_Path}/src/objs/nginx ]; then
    echo '========================================================'
    GetSysInfo
    echo -e "ERROR: nginx-${nginxVersion} installation failed."
    echo -e "升级失败,请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
    exit 1
    fi
    sleep 1
    /etc/init.d/nginx stop
    mv -f ${Setup_Path}/sbin/nginx ${Setup_Path}/sbin/nginxBak
    \cp -rfp ${Setup_Path}/src/objs/nginx ${Setup_Path}/sbin/
    if [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ] || [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ] ;then
    wget -c -O lua-resty-core-0.1.26.zip ${download_Url}/src/lua-resty-core-0.1.26.zip
    unzip lua-resty-core-0.1.26.zip
    cd lua-resty-core-0.1.26
    make install PREFIX=/www/server/nginx
    cd ..
    rm -rf lua-resty-core-0.1.26*
    
    wget -c -O lua-resty-lrucache-0.13.zip ${download_Url}/src/lua-resty-lrucache-0.13.zip
    unzip lua-resty-lrucache-0.13.zip
    cd lua-resty-lrucache-0.13
    make install PREFIX=/www/server/nginx
    cd ..
    rm -rf lua-resty-core-0.1.26*
    fi
    wget -O /etc/init.d/nginx ${download_Url}/init/124nginx.init
    fi
    sleep 1
    /etc/init.d/nginx start
    rm -rf ${Setup_Path}/src
    nginx -v
    
    echo "${nginxVersion}" >${Setup_Path}/version.pl
    rm -f ${Setup_Path}/version_check.pl
    if [ "${version}" == "tengine" ]; then
    echo "2.2.4(${tengine})" >${Setup_Path}/version_check.pl
    fi
    exit
    }
    Set_Conf() {
    Default_Website_Dir=$Root_Path'/wwwroot/default'
    mkdir -p ${Default_Website_Dir}
    mkdir -p ${Root_Path}/wwwlogs
    mkdir -p ${Setup_Path}/conf/vhost
    mkdir -p /usr/local/nginx/logs
    mkdir -p ${Setup_Path}/conf/rewrite
    
    mkdir -p /www/wwwlogs/load_balancing/tcp
    mkdir -p /www/server/panel/vhost/nginx/tcp
    
    wget -O ${Setup_Path}/conf/nginx.conf ${download_Url}/conf/nginx1.conf -T20
    wget -O ${Setup_Path}/conf/pathinfo.conf ${download_Url}/conf/pathinfo.conf -T20
    wget -O ${Setup_Path}/conf/enable-php.conf ${download_Url}/conf/enable-php.conf -T20
    wget -O ${Setup_Path}/html/index.html ${download_Url}/error/index.html -T 20
    
    chmod 755 /www/server/nginx/
    chmod 755 /www/server/nginx/html/
    chmod 755 /www/wwwroot/
    chmod 644 /www/server/nginx/html/*
    
    cat >${Root_Path}/server/panel/vhost/nginx/phpfpm_status.conf </www/server/nginx/conf/enable-php-00.conf
    for phpV in 52 53 54 55 56 70 71 72 73 74 75 80 81 82 83 84; do
    cat >${Setup_Path}/conf/enable-php-${phpV}.conf <>${Root_Path}/server/panel/vhost/nginx/phpfpm_status.conf <>${Root_Path}/server/panel/vhost/nginx/phpfpm_status.conf
    
    cat >${Setup_Path}/conf/proxy.conf <${Setup_Path}/conf/luawaf.conf <${Root_Path}/server/panel/vhost/nginx/waf2monitor_data.conf </dev/null
    if [ ! -d "/www/server/panel/vhost/wafconf" ]; then
    mv $Setup_Path/waf/wafconf /www/server/panel/vhost/wafconf
    fi
    
    sed -i "s#include vhost/\*.conf;#include /www/server/panel/vhost/nginx/\*.conf;#" ${Setup_Path}/conf/nginx.conf
    sed -i "s#/www/wwwroot/default#/www/server/phpmyadmin#" ${Setup_Path}/conf/nginx.conf
    sed -i "/pathinfo/d" ${Setup_Path}/conf/enable-php.conf
    sed -i "s/#limit_conn_zone.*/limit_conn_zone \$binary_remote_addr zone=perip:10m;\n\tlimit_conn_zone \$server_name zone=perserver:10m;/" ${Setup_Path}/conf/nginx.conf
    sed -i "s/mime.types;/mime.types;\n\t\tinclude proxy.conf;\n/" ${Setup_Path}/conf/nginx.conf
    #if [ "${nginx_version}" == "1.12.2" ] || [ "${nginx_version}" == "openresty" ] || [ "${nginx_version}" == "1.14.2" ];then
    sed -i "s/mime.types;/mime.types;\n\t\t#include luawaf.conf;\n/" ${Setup_Path}/conf/nginx.conf
    #fi
    
    PHPVersion=""
    for phpVer in 52 53 54 55 56 70 71 72 73 74 80 81 82 83 84; do
    if [ -d "/www/server/php/${phpVer}/bin" ]; then
    PHPVersion=${phpVer}
    fi
    done
    
    if [ "${PHPVersion}" ]; then
    \cp -r -a ${Setup_Path}/conf/enable-php-${PHPVersion}.conf ${Setup_Path}/conf/enable-php.conf
    fi
    
    if [ ! -f "${Setup_Path}/conf/enable-php.conf" ];then
    touch ${Setup_Path}/conf/enable-php.conf
    fi
    
    AA_PANEL_CHECK=$(cat /www/server/panel/config/config.json | grep "English")
    if [ "${AA_PANEL_CHECK}" ]; then
    #\cp -rf /www/server/panel/data/empty.html /www/server/nginx/html/index.html
    wget -O /www/server/nginx/html/index.html ${download_Url}/error/index_en_nginx.html -T 20
    chmod 644 /www/server/nginx/html/index.html
    wget -O /www/server/panel/vhost/nginx/0.default.conf ${download_Url}/conf/nginx/en.0.default.conf
    for phpV in 52 53 54 55 56 70 71 72 73 74 75 80 81 82 83; do
    wget -O ${Setup_Path}/conf/enable-php-${phpV}-wpfastcgi.conf ${download_Url}/install/wordpress_conf/nginx/enable-php-${phpV}-wpfastcgi.conf
    done
    fi
    
    wget -O /etc/init.d/nginx ${download_Url}/init/nginx.init -T 20
    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ] || [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    if [ -d "/www/server/btwaf" ];then
    rm -rf /www/server/btwaf/ngx
    rm -rf /www/server/btwaf/resty
    \cp -rpa /www/server/nginx/lib/lua/* /www/server/btwaf
    elif [ -d "/www/server/free_waf" ];then
    rm -rf /www/server/btwaf/ngx
    rm -rf /www/server/btwaf/resty
    \cp -rpa /www/server/nginx/lib/lua/* /www/server/free_waf
    else
    sed -i "/lua_package_path/d" /www/server/nginx/conf/nginx.conf
    sed -i '/include proxy\.conf;/a \ lua_package_path "/www/server/nginx/lib/lua/?.lua;;";' /www/server/nginx/conf/nginx.conf
    fi
    wget -O /etc/init.d/nginx ${download_Url}/init/124nginx.init -T 20
    if [ "${ARM_CHECK}" ]; then
    sed -i '/lua_package_path/s|^|#|' /www/server/nginx/conf/nginx.conf
    fi
    fi
    if [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    HTTP_POST_CHECK=$(cat /www/server/nginx/conf/fastcgi.conf|grep "HTTP_HOST")
    if [ -z "${HTTP_POST_CHECK}" ];then
    echo "fastcgi_param HTTP_HOST \$host;" >> /www/server/nginx/conf/fastcgi.conf
    fi
    fi
    
    HTTP3_CHECK=$(nginx -V 2>&1|grep http_v3)
    if [ -z "${HTTP3_CHECK}" ];then
    QUIC_CHECK=$(grep quic /www/server/panel/vhost/nginx/*.conf)
    if [ "${QUIC_CHECK}" ];then
    sed -i "/listen 443 quic/d" /www/server/panel/vhost/nginx/*.conf
    sed -i "/quic=/d" /www/server/panel/vhost/nginx/*.conf
    sed -i "/http2 on/d" /www/server/panel/vhost/nginx/*.conf
    fi
    fi
    
    chmod +x /etc/init.d/nginx
    }
    Set_Version() {
    if [ "${version}" == "tengine" ]; then
    echo "-Tengine2.2.3" >${Setup_Path}/version.pl
    echo "2.2.4(${tengine})" >${Setup_Path}/version_check.pl
    elif [ "${version}" == "openresty" ] || [ "${version}" == "openresty127" ]; then
    echo "openresty" >${Setup_Path}/version.pl
    if [ "${version}" == "openresty127" ];then
    echo "openresty-${openresty127}" >${Setup_Path}/version_check.pl
    else
    echo "openresty-${openresty}" >${Setup_Path}/version_check.pl
    fi
    else
    echo "${nginxVersion}" >${Setup_Path}/version.pl
    fi
    
    if [ "${GMSSL}" ]; then
    echo "1.18国密版" >${Setup_Path}/version_check.pl
    fi
    }
    
    Uninstall_Nginx() {
    if [ -f "/etc/init.d/nginx" ]; then
    Service_Del
    /etc/init.d/nginx stop
    rm -f /etc/init.d/nginx
    fi
    [ -f "${Setup_Path}/rpm.pl" ] && yum remove bt-$(cat ${Setup_Path}/rpm.pl) -y
    [ -f "${Setup_Path}/deb.pl" ] && apt-get remove bt-$(cat ${Setup_Path}/deb.pl) -y
    pkill -9 nginx
    rm -rf ${Setup_Path}
    rm -rf /www/server/btwaf/ngx
    rm -rf /www/server/btwaf/resty
    rm -rf /www/server/btwaf/librestysignal.so
    rm -rf /www/server/btwaf/rds
    rm -rf /www/server/btwaf/redis
    rm -rf /www/server/btwaf/tablepool.lua
    }
    
    actionType=$1
    version=$2
    
    if [ "${actionType}" == "uninstall" ]; then
    Service_Del
    Uninstall_Nginx
    else
    case "${version}" in
    '1.10')
    nginxVersion=${nginx_112}
    ;;
    '1.12')
    nginxVersion=${nginx_112}
    ;;
    '1.14')
    nginxVersion=${nginx_114}
    ;;
    '1.15')
    nginxVersion=${nginx_115}
    ;;
    '1.16')
    nginxVersion=${nginx_116}
    ;;
    '1.17')
    nginxVersion=${nginx_117}
    ;;
    '1.18')
    nginxVersion=${nginx_118}
    ;;
    '1.18.gmssl')
    nginxVersion=${nginx_118}
    GMSSL="True"
    ;;
    '1.19')
    nginxVersion=${nginx_119}
    ;;
    '1.20')
    nginxVersion=${nginx_120}
    ;;
    '1.21')
    nginxVersion=${nginx_121}
    ;;
    '1.22')
    nginxVersion=${nginx_122}
    ;;
    '1.23')
    nginxVersion=${nginx_123}
    ;;
    '1.24')
    nginxVersion=${nginx_124}
    ;;
    '1.25')
    nginxVersion=${nginx_125}
    ;;
    '1.26')
    nginxVersion=${nginx_126}
    ;;
    '1.27')
    nginxVersion=${nginx_127}
    ;;
    '1.28')
    nginxVersion=${nginx_128}
    ;;
    '1.8')
    nginxVersion=${nginx_108}
    ;;
    'openresty')
    nginxVersion=${openresty}
    ;;
    'openresty127')
    nginxVersion=${openresty127}
    ;;
    *)
    nginxVersion=${tengine}
    version="tengine"
    ;;
    esac
    if [ "${actionType}" == "install" ]; then
    if [ -f "/www/server/nginx/sbin/nginx" ]; then
    Uninstall_Nginx
    fi
    System_Lib
    if [ -z "${ARM_CHECK}" ]; then
    Install_Jemalloc
    Install_LuaJIT
    Install_cjson
    fi
    Download_Src
    Install_Configure
    Install_Nginx
    Set_Conf
    Set_Version
    Service_Add
    /etc/init.d/nginx start
    
    #免费试用网站监控报表
    # if [ ! -f "/www/server/panel/plugin/monitor/info.json" ] && [ -f "/usr/bin/btpython" ];then
    # if [ -z "${AA_PANEL_CHECK}" ];then
    # cd /www/server/panel/install
    # wget -O plugin_install.py ${download_Url}/tools/plugin_install.py -T 20
    # nohup /usr/bin/btpython plugin_install.py monitor 4.1.1 >/dev/null 2>&1 &
    # fi
    # fi
    # echo "安装基础网站流量统计程序..."
    # wget -O site_new_total.sh ${download_Url}/site_total/install.sh &> /dev/null
    # bash site_new_total.sh &> /dev/null
    # rm -f site_new_total.sh
    # echo "安装基础网站流量统计程序完成"
    
    elif [ "${actionType}" == "update" ]; then
    if [ "${version}" == "1.25" ] || [ "${version}" == "1.26" ] || [ "${version}" == "1.27" ] || [ "${version}" == "1.28" ];then
    Install_LuaJIT
    fi
    Download_Src
    Install_Configure
    Update_Nginx
    fi
    fi
    

完成!enjoy~

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。