Apache-2.2

在 Apache 上正確設置虛擬主機?

  • July 23, 2014

我在確定 Centos6 伺服器上 Apache2 虛擬主機的正確配置時遇到了問題。我有一個安裝了 apache2 (httpd) 的干淨 Centos6 安裝,預設情況下定義了*/var/www/html*、/var/www/icons/var/www/errors和*/var/www/cgi-bin內容文件夾在/etc/httpd/conf/httpd.conf*中配置。

我配置了 2 個域a.comb.com,為此我創建了文件文件夾*/var/www/a.com/var/www/b.com*,並在*/etc/httpd/conf/httpd.conf*我配置了 NameVirtualHost

NameVirtualHost *:80

並為a.comb.com添加了相應的虛擬主機,例如

<VirtualHost *:80>
   ServerAdmin admin@a.com
   ServerName  a.com
   ServerAlias www.a.com
   DocumentRoot /var/www/a.com
   <Directory />
           Options FollowSymLinks
           AllowOverride None
   </Directory>
   <Directory "/var/www/a.com">
           Options Indexes FollowSymLinks MultiViews
           AllowOverride All
           Order allow,deny
           Allow from all
   </Directory>
</VirtualHost>

a.comb.com都工作正常,我可以在有或沒有www子域的情況下訪問它們,但我很困惑我應該如何處理預設的 httpd 配置和預設內容文件夾?即使使用純 IP 地址呼叫伺服器(請求被定向到a.com虛擬主機),我似乎也無法訪問*/var/www/html中的預設站點。我還嘗試將伺服器主機名配置為c.com*並設置

ServerName c.com:80

但即使對c.com的請求仍然被重定向到a.com虛擬主機。

我不需要 apache 創建的預設內容文件夾,所以我應該刪除*/var/www/html*、/var/www/icons/var/www/errors和*/var/www/cgi-bin文件夾和相應的定義在/etc/httpd/conf/httpd.conf*上

DocumentRoot "/var/www/html"
<Directory "/var/www/html" ... />
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons" ... />
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin" ... />
Alias /error/ "/var/www/error/"
<Directory "/var/www/error" ... />

或者在同一台伺服器上配置虛擬主機時,應該如何配置和訪問預設主機?

當您使用基於名稱的虛擬主機時,第一個成為預設主機,它還將響應與其他虛擬主機的or指令中<VirtualHost>聲明的域名不匹配的所有請求。ServerName``ServerAlias

手冊

主主機消失

如果您將虛擬主機添加到現有 Web 伺服器,您還必須為現有主機創建一個<VirtualHost>塊。此虛擬主機中包含的 ServerName 和 DocumentRoot 應與全域 ServerName 和 DocumentRoot 相同。首先在配置文件中列出此虛擬主機,以便它將充當預設主機。

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