在 Apache 上正確設置虛擬主機?
我在確定 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.com和b.com,為此我創建了文件文件夾*/var/www/a.com和/var/www/b.com*,並在*/etc/httpd/conf/httpd.conf*我配置了 NameVirtualHost
NameVirtualHost *:80
並為a.com和b.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.com和b.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 相同。首先在配置文件中列出此虛擬主機,以便它將充當預設主機。