腳本功能概覽
- 檢查
httpd 是否安裝,未安裝則透過 YUM 安裝(需預先配置本地/網路 YUM 源)。
- 停用預設主站,啟用
NameVirtualHost。
- 批量建立 5 個基於域名的虛擬主機目錄與測試首頁。
- 自動生成
VirtualHost 配置區塊寫入 httpd.conf。
- 語法檢查通過後啟動服務並設定開機自啟。
完整腳本(AutoSetWebServer.sh)
#!/bin/bash
# Author: honway
# ScriptName: AutoSetWebServer
set -euo pipefail
# 1. 配置 YUM 源(示範備份原 repo 並建立指向 FTP 的 repo)
YUM_DIR=/etc/yum.repos.d
for f in "$YUM_DIR"/*.repo; do
[ -f "$f" ] && mv "$f" "${f}.bak"
done
cat > "$YUM_DIR/yumconf.repo" <<'EOF'
[Server]
name=Server
baseurl=ftp://172.16.0.1/pub/Server
gpgcheck=0
enabled=1
[VT]
name=VT
baseurl=ftp://172.16.0.1/pub/VT
gpgcheck=0
enabled=1
[Cluster]
name=Cluster
baseurl=ftp://172.16.0.1/pub/Cluster
gpgcheck=0
enabled=1
[ClusterStorage]
name=ClusterStorage
baseurl=ftp://172.16.0.1/pub/ClusterStorage
gpgcheck=0
enabled=1
[errata]
name=errata
baseurl=ftp://172.16.0.1/pub/errata
gpgcheck=0
enabled=0
EOF
# 2. 安裝 httpd
if ! rpm -q httpd &>/dev/null; then
echo "Installing httpd..."
yum -y install httpd
else
echo "httpd already installed."
fi
# 3. 修改主配置:註解預設 DocumentRoot、啟用 NameVirtualHost
sed -i 's@^\(DocumentRoot[[:space:]]\+"\)@#\1@' /etc/httpd/conf/httpd.conf
sed -i 's@^#\(NameVirtualHost[[:space:]]\+[^[:space:]]\+:80\)@\1@' /etc/httpd/conf/httpd.conf
# 4. 建立虛擬主機目錄
mkdir -p /vhosts/{magedu,bbs,wp,pw,pma}
# 5. 批量生成 VirtualHost 區塊
FQDN=magedu.com
CONF=/etc/httpd/conf/httpd.conf
declare -A VHOSTS=(
["www.$FQDN"]="/vhosts/magedu"
["bbs.$FQDN"]="/vhosts/bbs"
["wp.$FQDN"]="/vhosts/wp"
["pw.$FQDN"]="/vhosts/pw"
["pma.$FQDN"]="/vhosts/pma"
)
for server_name in "${!VHOSTS[@]}"; do
doc_root="${VHOSTS[$server_name]}"
cat >> "$CONF" <
ServerName $server_name
DocumentRoot $doc_root
EOF
echo "$server_name" > "$doc_root/index.html"
done
# 6. 語法檢查並啟動
if httpd -t; then
chkconfig --level 345 httpd on
service httpd start
echo "httpd started successfully."
else
echo "httpd configuration test failed!" >&2
exit 1
fi
使用說明
- 將腳本存為
AutoSetWebServer.sh,賦予執行權限:chmod +x AutoSetWebServer.sh。
- 確保 YUM 源可用(腳本中 FTP 位址需替換為實際環境源)。
- 以 root 執行:
./AutoSetWebServer.sh。
- 完成後,瀏覽器分別訪問
www.magedu.com、bbs.magedu.com... 驗證首頁顯示對應 FQDN。
關鍵點解析
set -euo pipefail:腳本嚴謹模式,變數未定義/命令失敗/管道失敗即退出。
declare -A 關聯陣列:Bash 4.0+ 支援,優雅映射域名與目錄。
sed 正則修改配置:註解預設根目錄、取消註解 NameVirtualHost。
httpd -t:語法檢查,避免錯誤配置導致服務無法啟動。
chkconfig --level 345 httpd on:設定運行級別 3/4/5 自啟(SysVinit),systemd 環境請改 systemctl enable httpd。
擴充建議
- 加入 SSL 憑證自動部署(Let's Encrypt + certbot)。
- 整合日誌切割(logrotate)、監控(Prometheus node_exporter + apache_exporter)。
- 納入 CI/CD 流程,實現基礎設施即代碼。]