首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Apache 虛擬主機配置完整指南:NameVirtualHost、多域名、非預設目錄權限解決

     編輯:更多程式設計知識

核心配置檔

編輯 httpd.conf (或 extra/httpd-vhosts.conf 並 Include),Apache 2.4+ 已棄用 NameVirtualHost,直接用 VirtualHost。

基本虛擬主機範例 (三個站點共用 80 埠)

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。
OptionsIndexes 允許目錄列表,FollowSymLinks 追蹤符號連結。
AllowOverrideAll 允許 .htaccess 覆蓋,None 禁用 (效能較好)。

非預設目錄權限問題 (403 Forbidden)

若 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。

SSL/HTTPS 虛擬主機 (443 埠)

<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>

測試與除錯

  1. apachectl configtest (或 httpd -t) 驗證語法。
  2. systemctl reload apache2 (或 httpd -k graceful) 熱重載。
  3. curl -H "Host: www.example.com" https://localhost/ 驗證虛擬主機匹配。
  4. 查看 error_log 確認 403/500 根因。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved