VirtualHosts 内部或外部的目录?

Pab*_*blo 9 httpd directory virtualhost apache-2.2

将目录标签放在 VirtualHosts 内部或外部是否有区别?我找到了一个配置文件,里面有几个 VirtualHosts,里面有相同的 Directory 标签,外面也有相同的标签;所以我正在考虑摆脱这种重复,但我并不完全理解所涉及的语义。

BMD*_*Dan 13

<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> 的位置最终是三件事的组合,按重要性递增:

  1. 政策——如果公司总是把 <Directory> 放在 <VirtualHost> 中,那几乎肯定是不正确的。
  2. 易读性——如果您有六百个 VHost,所有这些都需要相同的 <Directory> 节,那么可能值得打破策略。
  3. 安全性——如果一种方法或另一种方法有明显的安全优势,那么这就是事实上的正确选择,该死的策略和易读性(尽管您最好记录下您违反策略的原因和方式,并采取措施,例如使用Include以最大限度地提高易读性)。