Apache-2.2

如何在 apache2 中禁用預設虛擬主機?

  • September 28, 2021

在 apache2 設計中,任何帶有未知主機的 http 請求都將被定向到第一個載入的 VirtualHost。有沒有辦法禁用此功能?換句話說,我想要一個 Web 伺服器,使用者只能在其中訪問明確命名的 VirtualHost 定義。ServerName 或 ServerAlias 行中未明確提及的任何其他主機名都應被忽略。

這可能嗎?

Listen 80
NameVirtualHost *

<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

**更新:**正如下面和其他地方所建議的,默默地忽略請求可能不是一個好主意,並且可能會破壞 RFC 的 HTTP。但是,由於虛擬主機旨在模擬具有多個單獨的物理 HTTP 伺服器,因此靜默忽略方法對我來說似乎並不不合理。這與基於 IP 的虛擬主機相同,並且對某些 IP 進行防火牆(可能並非針對所有客戶端)。

我不確定“默默地失敗”是個好主意。您應該至少向客戶說明發生了什麼*。*也許您可以發送一個 http 410“已消失”錯誤。這樣的事情應該可以解決問題:

RewriteRule ^.*$ - [G]

此外,您應該能夠指定一個自定義的 410 錯誤文件,它可能只是一個空白的 html 頁面。

這是不涉及重寫規則的另一種方法:

<VirtualHost _default_:*>
   <Location />
       Deny from all
       Options None
       ErrorDocument 403 Forbidden.
   </Location>
</VirtualHost>

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