編輯 httpd.conf (或 extra/httpd-vhosts.conf 並 Include),Apache 2.4+ 已棄用 NameVirtualHost,直接用 VirtualHost。
Listen 80
# 必須放在最前面:預設虛擬主機 (捕獲未匹配域名)
<VirtualHost *:80>
ServerName default
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
# 站點 1:www.example.com
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot "/var/www/example"
ErrorLog "/var/log/apache2/example_error.log"
CustomLog "/var/log/apache2/example_access.log" combined
<Directory "/var/www/example">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# 站點 2:blog.example.com
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot "/var/www/blog"
<Directory "/var/www/blog">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# 站點 3:api.example.com (放在最後作為 fallback)
<VirtualHost *:80>
ServerName api.example.com
DocumentRoot "/var/www/api"
<Directory "/var/www/api">
Require all granted
</Directory>
</VirtualHost>
| 指令 | 說明 |
|---|---|
ServerName | 主域名,**必須精確匹配** DNS 解析的域名。 |
ServerAlias | 別名 (支援萬用字元 *.example.com),同一虛擬主機服務多域名。 |
DocumentRoot | 網站根目錄絕對路徑,建議統一放 /var/www/ 下。 |
<Directory> | 目錄級權限控制,**Apache 2.4 用 Require all granted** 取代舊版 Order allow,deny / Allow from all。 |
Options | Indexes 允許目錄列表,FollowSymLinks 追蹤符號連結。 |
AllowOverride | All 允許 .htaccess 覆蓋,None 禁用 (效能較好)。 |
若 DocumentRoot 指向 /home/user/www 或其他非系統預設目錄,需在 **主配置** 中授權該父目錄:
<Directory "/home/user">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
並確保系統層面目錄權限:chmod 755 /home/user/www,SELinux 環境需 chcon -R -t httpd_sys_content_t /home/user/www。
<VirtualHost *:443>
ServerName secure.example.com
DocumentRoot "/var/www/secure"
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/example.crt"
SSLCertificateKeyFile "/etc/ssl/private/example.key"
<Directory "/var/www/secure">
Require all granted
</Directory>
</VirtualHost>
apachectl configtest (或 httpd -t) 驗證語法。systemctl reload apache2 (或 httpd -k graceful) 熱重載。curl -H "Host: www.example.com" https://localhost/ 驗證虛擬主機匹配。error_log 確認 403/500 根因。