2016-01-22 107 views
2

我在我的Apache系統上設置了一個VirtualHost,它恰好與服務器的FQDN具有相同的名稱。這是FQDN:Apache虛擬主機默認爲FQDN

[email protected]:/etc/apache2/sites-available# hostname -f 
mail.example.com 

這是conf文件的內容:

000-default.conf: 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

example.com.conf: 
<VirtualHost *:80> 
    ServerName mail.example.com 
    DocumentRoot /home/example/public_html 
</VirtualHost> 

現在我希望mail.example.com將匹配的虛擬主機,並因此使用的DocumentRoot /家庭/例子/的public_html。 它沒有。

運行apache2ctl -S產量:

*:80     is a NameVirtualHost 
    default server mail.example.com (/etc/apache2/sites-enabled/000-default.conf:1) 
    port 80 namevhost mail.example.com (/etc/apache2/sites-enabled/000-default.conf:1) 
    port 80 namevhost mail.example.com (/etc/apache2/sites-enabled/abcarrental.nl.conf:1) 

所以默認的服務器是mail.example.com,因此DocumentRoot的是/ var/www/html等。

選擇不同的VirtualHost名稱(例如webmail.example.com)並將VirtualHostName更改爲webmail.example.com可解決該問題。

我已經通過了Apache NamedVirtualHost手冊頁,我找不到解釋。只有解釋說明,如果名稱不是而不是與任何虛擬主機匹配,則使用默認值。但是,如果FQDM等於所請求的名稱,則不會使用默認值。

這是行爲設計​​嗎?

回答

2

是的,當您從系統本地主機名初始化的虛擬主機中忽略服務器名稱,或者禁止從任何本地IP地址的反向DNS查找時,它是有意設計的。

不幸的是,這個配置是由debian/ubuntu包創建的默認虛擬主機完成的。

事後看來 - 我們認爲最好在全部(首先列出的)虛擬主機中設置一個完全虛擬的ServerName。

+0

AH!我明白了你的意思是「從虛擬主機中省略一個ServerName」。 000-default.conf文件有一個沒有名稱的VirtualHost。這使得它用主機名進行初始化。是的,輸入虛擬服務器名稱可以解決這個問題。奇怪的是,當它最終在下一個VirtualHost中指定時,沒有更正ServerName。 –

+0

下一個虛擬主機中的虛擬主機僅用於下一個虛擬主機 – covener

+0

不,它不是。這就是令人困惑的原因。由於默認優先於指定的虛擬主機,所以下一個虛擬主機將被忽略。你的回答中的解釋是正確和非常明確的。 –