Virtualhost

Apache 回答不應該的請求

  • August 18, 2011

我有以下 2 條域記錄

website.com 10.0.0.1
www.website.com 10.0.0.1

我有(有)以下 2 個虛擬主機

#note how the IP address is wrong
<VirtualHost 10.0.0.2:80>

   ServerName website.com
   Redirect / http://www.website.com

</VirtualHost>

<VirtualHost 10.0.0.1:80>

   ServerName www.website.com
 #note how there is no alias here
   DocumentRoot /var/www/www.website.com

   <IfModule mpm_itk_module>
           AssignUserId www-website www-website
   </IfModule>

   CustomLog /var/log/apache2/www.website.com-access.log combined
   ErrorLog /var/log/apache2/www.website.com-error.log

</VirtualHost>

<VirtualHost 10.0.0.1:443>
   ServerName www.website.com

   DocumentRoot /var/www/www.website.com

   <IfModule mpm_itk_module>
           AssignUserId www-website www-website
   </IfModule>

   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/www.website.com

   CustomLog /var/log/apache2/www.website.com-ssl-access.log combined
   ErrorLog /var/log/apache2/www.website.com-ssl-error.log

</VirtualHost>

我預計對http://website.com的請求將返回 404。但是,它的服務就像是從http://www.website.com傳遞的一樣。為什麼?

LazyOne 是完全正確的。只要您NameVirtualHost整理好指令,如果沒有其他或匹配項,則使用為請求的IP 地址VirtualHost定義的第一個。ServerName``ServerAlias

因此,如果您想為每個未命中主機標頭匹配的 ip 地址提供 404,請創建一個不帶or指令的VirtualHost(每個 ip),並將其放置在配置中以便首先載入它。就像是:ServerName``ServerAlias

<VirtualHost 10.0.0.1:80>
   Redirect 404 /   
</VirtualHost>

<VirtualHost 10.0.0.2:80>
   Redirect 404 /   
</VirtualHost>

<VirtualHost 10.0.0.2:80>
   ServerName website.com
   Redirect / http://www.website.com
</VirtualHost>

<VirtualHost 10.0.0.1:80>
   ServerName www.website.com
   #note how there is no alias here
   DocumentRoot /var/www/www.website.com
...
</VirtualHost>

更新:以下大部分內容來自 apache2 文件,此處此處

首先載入主配置文件,通常命名為 httpd.conf。但是如果你在基於 debian 的系統上使用二進制包,它很有可能會被稱為 apache2.conf。Include使用主配置中的指令添加其他配置文件。允許多次使用該Include指令。指令可以使用 fnmatch 樣式的萬用字元按字母順序Include一次載入多個配置文件。

為了進一步澄清(希望如此),首先載入您的主配置。Include遇到指令時,它們會按照它們在主配置中出現的順序載入。如果個人Include使用萬用字元,則匹配的每個配置文件都按字母順序載入。

在 debian 伺服器上,apache2.conf 可能如下所示:

# Include module configuration:
# ...
Include mods-enabled/*.conf

# Include all the user configurations:
Include httpd.conf

# Include ports listing
Include ports.conf

# ...

# Include generic snippets of statements
Include conf.d/

# Include the virtual host configurations:
Include sites-enabled/

換句話說,任何.conf以 mods-enabled/ 結尾的文件都會在 httpd.conf 之前載入,httpd.conf 會在 ports.conf 之前載入,ports.conf 會在 conf.d/ 中的任何文件之前載入,等等。

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