Linux

具有多個域的虛擬主機不提供正確的 DocumentRoot

  • April 3, 2018

執行 CentOS 6、Apache。

我的 httpd.conf 中有以下內容:

<VirtualHost *:80>
   DocumentRoot /var/www/html
   ServerName domain1.example
   ServerAlias www.domain1.example
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot /var/www/html/domain2
   ServerName domain2.example
   ServerAlias www.domain2.example
</VirtualHost>

每當我訪問domain2.example(或www.domain2.example)時,都會顯示我domain1.example

編輯:更多資訊來自httpd.conf

Listen 80
#NameVirtualHost *:80

我檢查過的事情:

  • Apache 已重新啟動
  • 用於domain1.exampledomain2.example指向相同 IP的 DNS

我錯過了什麼?

解決方案:

正如帕特里克指出的那樣,在 Apache 2.2 中,NameVirtualHost使用多個VirtualHosts 時需要。這裡的解決方案是取消註釋中的行httpd.conf

#NameVirtualHost *:80

到:

NameVirtualHost *:80

由於您只使用 Apache 2.2,因此您絕對需要使用該NameVirtualHost指令以讓 Apache 知道您有多個不同名稱但具有相同 IP 的網站。

如本文件所述,該指令在 Apache 2.3 中已棄用:httpd.apache.org/docs/2.4/mod/core.html#namevirtualhost

在 2.3.11 之前,NameVirtualHost 需要指示伺服器特定 IP 地址和埠組合可用作基於名稱的虛擬主機。在 2.3.11 及更高版本中,任何時候在多個虛擬主機中使用 IP 地址和埠組合時,都會自動為該地址啟用基於名稱的虛擬主機。

對於您的版本,基於配置名稱的虛擬主機的指南在這裡: http ://httpd.apache.org/docs/2.2/vhosts/name-based.html#using

引用自:https://serverfault.com/questions/905699