我有多個網域引用同一台伺服器。現在我想為每個網域建立一個虛擬主機。這已經適用於某些領域,但不適用於所有領域。
範例:我導航到網域“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 伺服器透過虛擬主機的ServerName
和ServerAlias
參數來區分虛擬主機。
一個標準基於名稱的虛擬主機配置看起來像這樣:
<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