我在我的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等於所請求的名稱,則不會使用默認值。
這是行爲設計嗎?
AH!我明白了你的意思是「從虛擬主機中省略一個ServerName」。 000-default.conf文件有一個沒有名稱的VirtualHost。這使得它用主機名進行初始化。是的,輸入虛擬服務器名稱可以解決這個問題。奇怪的是,當它最終在下一個VirtualHost中指定時,沒有更正ServerName。 –
下一個虛擬主機中的虛擬主機僅用於下一個虛擬主機 – covener
不,它不是。這就是令人困惑的原因。由於默認優先於指定的虛擬主機,所以下一個虛擬主機將被忽略。你的回答中的解釋是正確和非常明確的。 –