htaccess 的加载时间影响

htaccess 的加载时间影响

通常来说,处理 Apache 上的事情有两种可能:

  • 使用 htaccess 文件逐个配置文件夹

  • 完全放弃 htaccess 并将所有规则放入 httpd.conf

使用 htaccess 是加载时间问题。我想知道,使用 htaccess 在加载时间方面有多耗时?有测试吗?

答案1

推荐来自 Apache 项目的是:

一般来说,仅当您无权访问主服务器配置文件时才应使用 .htaccess 文件。...一个常见的误解用户身份验证和 mod_rewrite 指令必须放在.htaccess文件中。

因此请同时设置AllowOverride None以及主 httpd.conf 中的所有其他指令(和/或您指定的子部分)Include


当 Apache未配置AllowOverride None无论是否.htaccess使用任何文件,您都已经发生了(轻微的)性能损失。

这是因为对于每一个请求apache 需要检查.htaccess每个指向请求资源的(子)目录中是否存在潜在文件。例如,当请求目录 /www/htdocs/example 中的文件时,apache 必须查找以下文件:

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

因此,对于该目录外的每个文件访问,即使这些文件都不存在,也会有 4 次额外的文件系统访问。(如果为 / 设置了 AllowOveride)

用于此的系统调用(man 2 stat)本身并不昂贵,而且通常使用文件系统缓存而不是轮询实际磁盘,从而限制了实际的 IO 要求,但它仍然会累积起来,因为本文争论。


当实际存在一个或多个实际.htaccess文件时,apache 仍然需要open并阅读它(触发另一个 IO 读取操作,通常也是一个IO 写入更新文件系统的操作atime属性)和解析然后才能应用其中的逻辑。

与指令在主程序中时不同httpd.conf,主程序中只需要 apache 解析一次,而在启动时,每个.htaccess文件都需要针对每个请求再次进行解释。

除了 IO 操作之外,解析 .htaccess 文件的成本还取决于其复杂性。

这需要通过仔细的基准测试来确定。

答案2

费用取决于服务器的功能,特别是它的存储 I/O 子系统,以及是否涉及任何缓存。

测试它的方法是使用 .htacess 配置你的系统并负载测试就像您使用任何 Web 服务器一样。然后配置没有 .htaccess 的系统并运行相同的测试。

比较并对比结果你的配置的系统。

答案3

我认为您的问题没有唯一正确的答案。有许多变量会影响 htaccess 加载时间:

  • 站点文件夹结构:每次打开页面时都会加载每个文件夹中的所有 .htaccess。
  • htaccess 文件有多长:200 行 vs 3500 行?差别很大。
  • .htaccess 配置:重写和重定向规则可能比其他规则更重要(并且不是唯一的)。
  • 客户端的网络连接会影响加载时间。在我看来,你可以在多个地方尝试,取平均时间作为参考。
  • ab - Apache HTTP 服务器基准测试工具可以帮你

更多信息:

答案4

我测试过使用和不使用 .htaccess 的情况,确实没有发现速度或开销有任何差异。当然,我只运行 16 个网站,而且服务器速度超快,所以对我来说,跟踪毫秒数几乎是不可能的。在运行数百个网站的服务器上,开销可能很明显,所以正如@Iain 所说,测试一下看看。

我个人使用虚拟主机的 .conf 文件而不是 .htaccess 来做所有事情,它让我可以完全控制一切,它更干净,并且一次加载到 apache 的内存中。甚至我的 wordpress 重写规则也在我的 .conf 文件中,所以它永远不会中断。

相关内容