将 Directory 标签放在 VirtualHosts 内部或外部有什么区别吗?我发现一个配置文件中有多个 VirtualHosts,它们内部和外部都具有相同的 Directory 标签;所以我想摆脱这种重复,但我不完全理解所涉及的语义。
答案1
<VirtualHost> 内的 <Directory> 仅适用于通过该 VHost 访问该目录中的文件。<VirtualHost> 之外的 <Directory> 将始终适用(当然,除非在 <VirtualHost> 或其他地方被覆盖)。
从安全角度来看,您可以争论双方的观点:AllowOverride all
在 <VirtualHost> 内配置额外的访问级别(例如 、 )可能更明智,因为另一个 VHost 上的脚本之间不可预见的交互可能会允许您发起 XSS 攻击。在 <VirtualHost> 之外限制访问(Deny from all
、Allow from 127.0.0.1
)更有意义,以防通过顶级 Alias 或 ScriptAlias 之类的方式存在后门。然后您会遇到真正复杂的可能性:在哪里可以AllowOverride all
实现访问限制.htaccess
,因为可能有一个 VHost 出于性能或安全原因禁用了其脚本引擎,但随后会公开通常受 保护的包含敏感信息的文件.htaccess
?
归根结底,放置 <Directory> 的位置最终是三件事的组合,按重要性递增:
- 政策 — 如果公司总是将 <Directory> 放在 <VirtualHost> 内,那么打破现状几乎肯定是错误的。
- 可读性 - 如果您有六百个 VHost,它们都需要相同的 <Directory> 节,那么可能值得打破政策。
- 安全性——如果一种方法或另一种方法有明显的安全优势,那么这就是事实上正确的选择、政策和易读性都被诅咒了(尽管你最好记录下你为什么以及如何违反政策,并采取措施来
Include
最大限度地提高易读性)。