Apache 回答不應該的請求
我有以下 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/ 中的任何文件之前載入,等等。