- 給腳本執行權限:
chmod +x install_nginx.sh
- 以root用戶運行:
sudo ./install_nginx.sh
腳本如下:
#!/bin/bash
# Nginx一鍵化部署腳本(修復版本+開機自啟)
# 需要以root權限運行set -e # 任何命令失敗時立即退出腳本# 定義彩色輸出函數
color_echo() {local color=$1shiftcase $color inred) echo -e "\033[31m$@\033[0m" ;;green) echo -e "\033[32m$@\033[0m" ;;yellow) echo -e "\033[33m$@\033[0m" ;;*) echo "$@" ;;esac
}# 步驟1: 安裝所有必需的RPM包(修復已安裝包的問題)
color_echo green "步驟1: 安裝RPM依賴包"
rpm_packages=("cpp-4.8.5-44.el7.x86_64.rpm""gcc-4.8.5-44.el7.x86_64.rpm""gcc-c++-4.8.5-36.el7.x86_64.rpm""glibc-2.17-317.el7.x86_64.rpm""glibc-common-2.17-317.el7.x86_64.rpm""glibc-devel-2.17-317.el7.x86_64.rpm""glibc-headers-2.17-317.el7.x86_64.rpm""libstdc++-devel-4.8.5-36.el7.x86_64.rpm"
)for pkg in "${rpm_packages[@]}"; do# 檢查包是否已安裝if rpm -q $(echo $pkg | cut -d- -f1-2) >/dev/null 2>&1; thencolor_echo yellow "已安裝: $pkg"elsecolor_echo green "安裝中: $pkg"rpm -ivh $pkg --nodeps >/dev/null || {color_echo red "安裝$pkg失敗"exit 1}fi
done# 步驟2: 解壓所有源碼包
color_echo green "步驟2: 解壓源碼包"
extract_files() {for file in $@; docase $file in*.tar.gz) tar -xvf $file >/dev/null ;;*.zip) unzip -o -q $file ;;*) color_echo red "未知文件類型: $file" ;;esacdone
}extract_files nginx-1.20.2.tar.gz openssl-1.1.1j.tar.gz zlib-1.3.1.tar.gz pcre-8.41.zip# 步驟3: 編譯安裝OpenSSL
color_echo green "步驟3: 編譯安裝OpenSSL"
cd openssl-1.1.1j/
./config >/dev/null || {color_echo red "OpenSSL配置失敗"exit 1
}
make >/dev/null && make install >/dev/null || {color_echo red "OpenSSL編譯安裝失敗"exit 1
}
cd ..# 步驟4: 編譯安裝PCRE
color_echo green "步驟4: 編譯安裝PCRE"
cd pcre-8.41
./configure >/dev/null || {color_echo red "PCRE配置失敗"exit 1
}
make >/dev/null && make install >/dev/null || {color_echo red "PCRE編譯安裝失敗"exit 1
}
cd ..# 步驟5: 編譯安裝zlib
color_echo green "步驟5: 編譯安裝zlib"
cd zlib-1.3.1/
./configure >/dev/null || {color_echo red "zlib配置失敗"exit 1
}
make >/dev/null && make install >/dev/null || {color_echo red "zlib編譯安裝失敗"exit 1
}
cd ..# 步驟6: 編譯安裝Nginx
color_echo green "步驟6: 編譯安裝Nginx"
# 使用當前路徑(確保路徑正確)
NGINX_PREFIX="/usr/local/nginx"
PCRE_PATH="$PWD/pcre-8.41"
OPENSSL_PATH="$PWD/openssl-1.1.1j"cd nginx-1.20.2/
color_echo yellow "配置參數:"
color_echo yellow " --prefix=$NGINX_PREFIX"
color_echo yellow " --with-http_ssl_module"
color_echo yellow " --with-pcre=$PCRE_PATH"
color_echo yellow " --with-openssl=$OPENSSL_PATH"
color_echo yellow " --with-stream"./configure --prefix=$NGINX_PREFIX \--with-http_ssl_module \--with-pcre=$PCRE_PATH \--with-openssl=$OPENSSL_PATH \--with-stream >/dev/null || {color_echo red "Nginx配置失敗"exit 1
}make >/dev/null && make install >/dev/null || {color_echo red "Nginx編譯安裝失敗"exit 1
}
cd ..# 步驟7: 配置防火墻
color_echo green "步驟7: 配置防火墻"
systemctl stop firewalld >/dev/null 2>&1 || true
systemctl disable firewalld >/dev/null 2>&1 || true# >>>>>>>>>>> 新增:添加開機自啟功能 <<<<<<<<<<<
# 步驟8: 創建Nginx系統服務文件
color_echo green "步驟8: 設置開機自啟服務"
cat > /lib/systemd/system/nginx.service << 'EOF'
[Unit]
Description=The Nginx HTTP and reverse proxy server
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF# 重新加載systemd配置
systemctl daemon-reload# 啟動Nginx并設置開機自啟
if ! systemctl is-active nginx >/dev/null 2>&1; thencolor_echo green "啟動Nginx服務..."systemctl start nginx
ficolor_echo green "設置開機自啟..."
systemctl enable nginx >/dev/null 2>&1# 驗證服務狀態
color_echo green "檢查服務狀態..."
systemctl status nginx --no-pager | head -10color_echo green "=============================================="
color_echo green "Nginx安裝完成!"
color_echo green "安裝目錄: $NGINX_PREFIX"
color_echo green "啟動命令: $NGINX_PREFIX/sbin/nginx"
color_echo green "開機自啟: systemctl enable nginx"
color_echo green "管理命令: systemctl [start|stop|restart|status] nginx"
color_echo green "停止防火墻已生效"
color_echo green "=============================================="
安裝成功截圖:
相對應的軟件包 zip (包含所需要的依賴)
centos7離線部署Nginx高效安裝資源-CSDN文庫
或者可以私聊我? 免費提供