Apache-2.2
VirtualHosts 內部或外部的目錄?
將目錄標籤放在 VirtualHosts 內部還是外部有區別嗎?我找到了一個配置文件,它有幾個 VirtualHosts,裡面都有相同的 Directory 標籤,外面也一樣;所以我正在考慮擺脫這種重複,但我並不完全理解所涉及的語義。
<VirtualHost> 中的 <Directory> 僅適用於通過該 VHost 訪問該目錄中的文件。<VirtualHost> 之外的 <Directory> 將始終適用(當然,除非在 <VirtualHost> 或其他地方被覆蓋)。
從安全的角度來看,您可以爭論雙方:
AllowOverride all
在 <VirtualHost> 中配置額外的訪問級別( , f.ex.)可能更明智,因為另一個 VHost 上的腳本之間不可預見的互動可能允許您啟動 XSS攻擊。訪問限制 (Deny from all
,Allow from 127.0.0.1
) 在 <VirtualHost> 之外更有意義,以防通過頂級別名或 ScriptAlias 之類的東西存在後門。然後你會遇到真正複雜的可能性:在哪裡可以AllowOverride all
提供訪問限制.htaccess
,因為可能有一個 VHost,它的腳本引擎由於性能或安全原因而被禁用,但它通常會暴露一個包含敏感資訊的文件受保護.htaccess
?歸根結底,<Directory> 的放置位置最終是三件事的組合,按重要性遞增的順序排列:
- 政策——如果公司總是將 <Directory> 放在 <VirtualHost> 中,那麼搖擺不定幾乎肯定是不正確的。
- 易讀性——如果你有 600 個 VHost,所有這些都需要相同的 <Directory> 節,那麼可能值得打破策略。
- 安全性——如果一種方法或另一種方法有明顯的安全優勢,那麼這是事實上正確的選擇,政策和易讀性被詛咒(儘管你最好記錄下你為什麼和如何違反政策,並採取措施,如使用
Include
,以最大限度地提高可讀性)。