Apache 虛擬主機不工作

Apache 虛擬主機不工作

我有多個網域引用同一台伺服器。現在我想為每個網域建立一個虛擬主機。這已經適用於某些領域,但不適用於所有領域。

範例:我導航到網域“b.com”並取得應為“a.com”顯示的網站。然而,使用“a.com”,一切正常。來自“b.com”的請求也保存在“a.com”的日誌中,並且它還表明我已導航到“a.com”。

DNS 管理位於 Cloudflare。每個網域都有一個包含其網域的 TXT 記錄。

你能幫助我嗎?

我已將配置最小化。這就是 2 個文件。

第一個配置:

<VirtualHost a.com:80>
  Servername a.com
  DocumentRoot /var/www/a.com
</VirtualHost>

第二個配置:

<VirtualHost b.com:80>
  Servername b.com
  DocumentRoot /var/www/b.com
</VirtualHost>

先感謝您!

答案1

的參數<VirtualHost ...>告訴網路伺服器哪個本地IP位址綁定到。即使您指定了名稱,它也僅用於解析 IP 位址。 (例如,當伺服器有多個IP位址並且每個網域都有一個專用IP位址時使用。)

大多數虛擬主機是基於名稱的,而不是基於位址的,因此這個參數是無用的,您應該只*在其位置指定通配符位址。相反,Apache Web 伺服器透過虛擬主機的ServerNameServerAlias參數來區分虛擬主機。

一個標準基於名稱的虛擬主機配置看起來像這樣:

<VirtualHost *:80>
    ServerName a.example.tld
    DocumentRoot /var/www/a
</VirtualHost>

<VirtualHost *:443>
    ServerName a.example.tld
    DocumentRoot /var/www/a
    SSLEngine On
    SSLCertificateFile [...]
</VirtualHost>

---

<VirtualHost *:80>
    ServerName b.example.tld
    DocumentRoot /var/www/b
</VirtualHost>

<VirtualHost *:443>
    ServerName b.example.tld
    DocumentRoot /var/www/b
    SSLEngine On
    SSLCertificateFile [...]
</VirtualHost>

如果伺服器應該同時提供 HTTP 和 HTTPS,那麼您仍然需要為每個連接埠定義虛擬主機(:80 和:443)。您是否需要此功能可能取決於您的 Cloudflare 配置。

如果您正在使用老的Apache 版本,例如 v2.2 或更早版本,您還需要這些選項(它們在 v2.4 或更高版本中不再存在):

NameVirtualHost *:80
NameVirtualHost *:443

相關內容