Linux Apache2虛擬主機設置詳細步驟
首先確保系統已安裝Apache2。以Ubuntu/Debian為例,執行以下命令:
sudo apt update
sudo apt install apache2
安裝完成后,Apache會自動啟動??赏ㄟ^systemctl status apache2
確認服務狀態。
虛擬主機常用模塊需提前啟用,包括rewrite
(支持URL重寫)和ssl
(支持HTTPS):
sudo a2enmod rewrite
sudo a2enmod ssl
啟用后需重啟Apache使模塊生效:
sudo systemctl restart apache2
虛擬主機配置文件存放在/etc/apache2/sites-available/
目錄下,每個站點對應一個.conf
文件(如example.com.conf
)。使用文本編輯器創建并編輯文件:
sudo nano /etc/apache2/sites-available/example.com.conf
寫入以下基礎配置(以80端口為例):
<VirtualHost *:80>
ServerAdmin webmaster@example.com # 管理員郵箱
ServerName example.com # 主域名
ServerAlias www.example.com # 別名(可選)
DocumentRoot /var/www/example.com # 網站根目錄
<Directory /var/www/example.com>
Options Indexes FollowSymLinks # 允許目錄列表和符號鏈接
AllowOverride All # 允許.htaccess覆蓋配置(需mod_rewrite)
Require all granted # 允許所有用戶訪問(Apache 2.4+)
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log # 錯誤日志路徑
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined # 訪問日志格式
</VirtualHost>
關鍵參數說明:
ServerName
:必須與域名一致,是虛擬主機的核心標識;DocumentRoot
:網站文件的存儲目錄,需提前創建(如/var/www/example.com
);AllowOverride All
:允許通過.htaccess
文件修改配置(如URL重寫),若無需此功能可改為None
。為避免權限問題,需創建網站根目錄并賦予正確權限:
sudo mkdir -p /var/www/example.com # 創建目錄(-p遞歸創建子目錄)
sudo chown -R www-data:www-data /var/www/example.com # 將所有者設為Apache用戶(www-data)
sudo chmod -R 755 /var/www/example.com # 設置目錄權限(755:所有者可讀寫執行,其他用戶可讀執行)
目錄權限需嚴格遵循“最小權限原則”,避免使用777
(完全開放),防止安全風險。
使用a2ensite
命令啟用配置文件(將配置鏈接到sites-enabled/
目錄):
sudo a2ensite example.com.conf
若需禁用默認虛擬主機(000-default.conf
,避免與新站點沖突),可執行:
sudo a2dissite 000-default.conf
在重啟前,需檢查配置文件語法是否正確:
sudo apache2ctl configtest
若輸出Syntax OK
,則說明配置無誤。重啟Apache使更改生效:
sudo systemctl restart apache2
若需重新加載配置(不中斷現有連接),可使用:
sudo systemctl reload apache2
虛擬主機生效的前提是域名指向服務器IP。登錄DNS提供商管理界面,添加A記錄:
@
(代表主域名)或www
(代表www子域名);A
;為提升網站安全性,建議啟用SSL證書(以Let’s Encrypt免費證書為例):
sudo apt install certbot python3-certbot-apache # 安裝Certbot
sudo certbot --apache -d example.com -d www.example.com # 自動獲取并配置證書
Certbot會自動修改Apache配置,添加SSL虛擬主機(監聽443端口)。證書有效期為90天,到期前會自動提醒續期,也可手動執行sudo certbot renew
續期。
sudo ufw allow 80/tcp; sudo ufw allow 443/tcp
);確認DNS解析是否正確(使用ping example.com
驗證);DocumentRoot
目錄的所有者為www-data
,權限為755
;apache2ctl configtest
檢查,根據提示修復錯誤。