VirtualHosts内部或外部的目录?

在VirtualHosts内部或外部放置Directory标签有什么区别? 我发现一个configuration文件有几个VirtualHosts里面都有相同的Directory标签,外面是一样的; 所以我想摆脱这种重复,但我不完全理解所涉及的语义。

一个<VirtualHost>内的<Directory>将只适用于通过VHost访问的目录中的文件。 <VirtualHost>之外的<Directory>将始终应用(当然,除非在<VirtualHost>或其他地方重写)。

从安全的angular度来看,你可以争论双方:额外的访问级别( AllowOverride all ,f.ex.)在<VirtualHost>内部configuration可能更为明智,因为另一个VHost脚本之间的不可预见的交互可能允许你启动XSS攻击。 访问限制( Deny from allAllow from 127.0.0.1 )在<VirtualHost>之外具有更多的意义,以防通过类似顶级别名或ScriptAlias的后门。 然后你进入了一个非常复杂的可能性: AllowOverride all.htaccess的访问限制在哪里去,因为可能有一个VHost因为性能或者安全原因禁用了脚本引擎,但是这个文件会暴露一个文件敏感信息通常由.htaccess保护?

在一天结束的时候,将<Directory>放在哪里最终是三件事的组合,按照重要性的顺序排列:

  1. 政策 – 如果公司总是把<Directory>放在<VirtualHost>里面,那么摇摇欲坠几乎肯定是不正确的。
  2. 可读性 – 如果你有六百个VHosts,所有这些都需要相同的目录节,这可能是值得打破的政策。
  3. 安全性 – 如果一种方法或另一种方法有明显的安全利益,那么这就是事实上的正确select,政策和易读性应该被诅咒(尽pipe你会被build议logging为什么以及如何违反政策,采取像使用Include最大化易读性的措施)。