Apache-2.2

Apache2 預設虛擬主機按字母順序排列還是用_default_ 虛擬主機覆蓋?

  • December 15, 2012

我在 Apache Web 伺服器(CentOS 5、Apache 2.2.3)上有多個命名虛擬主機。

每個虛擬主機都有自己的配置文件/etc/httpd/vhosts.d,這些虛擬主機配置文件包含在主 httpd conf 中…Include vhosts.d/*.conf

這是 vhost confs 之一的範例…

NameVirtualHost *:80
<VirtualHost *:80>
       ServerName www.domain.biz
       ServerAlias domain.biz www.domain.biz
       DocumentRoot /var/www/www.domain.biz
       <Directory /var/www/www.domain.biz>
               Options +FollowSymLinks
               Order Allow,Deny
               Allow from all
       </Directory>
       CustomLog /var/log/httpd/www.domain.biz_access.log combined
       ErrorLog /var/log/httpd/www.domain.biz_error.log
</VirtualHost>

現在,當有人嘗試使用公共 IP 地址直接訪問伺服器時,他們會獲得聚合配置中指定的第一個虛擬主機(因此在我的情況下,它是vhosts.d目錄中的字母順序)。任何人直接通過 IP 地址訪問伺服器,我希望他們只獲得 403 或 404。

我發現了幾種設置預設/包羅萬象的虛擬主機的方法和一些相互矛盾的意見。

  • 我可以在 vhosts.d 中創建一個名為 000aaadefault.conf 的新 vhost conf 或其他東西,但這感覺有點討厭。
  • 在包含目錄之前,我的 main 中可能有一個<VirtualHost>塊。httpd.conf``vhosts.d
  • 我可以DocumentRoot在我的 main 中指定一個httpd.conf

httpd.conf_default_ http://httpd.apache.org/docs/2.2/vhosts/examples.html#default中指定一個預設虛擬主機怎麼樣?在我之前

有一個<VirtualHost _default_:*>塊是最好的方法嗎?httpd.conf``Include vhosts.d/*.conf

設置 a<VirtualHost _default_:*>不會做任何事情,它不會優先於配置為的虛擬主機<VirtualHost *:80>(除了 80 以外的埠)。

_default_只能與基於 IP 的虛擬主機一起使用。從文件中:

預設虛擬主機從不服務發送到用於基於名稱的虛擬主機的地址/埠的請求。

如果濫用字母順序來設置預設值感覺很髒,也許將您的預設基於名稱的虛擬主機放在您的 main行httpd.conf之前Include

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