htaccess 的加载时间影响

Evg*_*niy 14 performance .htaccess httpd.conf apache-2.2

通常有两种在 Apache 上处理东西的可能性:

  • 使用htaccess文件对文件夹进行一一配置

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

htaccess 的使用是一个加载时间问题。我想知道,htaccess 的使用在加载时间方面有多昂贵?有任何测试吗?

HBr*_*ijn 22

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
Run Code Online (Sandbox Code Playgroud)

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

用于该 ( man 2 stat)的系统调用本身并不昂贵,并且通常使用文件系统缓存而不是轮询实际磁盘,从而限制了实际 IO 要求,但它仍然可以累加,正如本文所讨论的那样


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

不像当你的指令在 main 中时httpd.conf,它只需要 apache 解析它们一次,在启动时,每个.htaccess文件都需要为每个请求再次解释。

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

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


use*_*517 4

费用取决于服务器的强大程度,特别是其存储 I/O 子系统以及是否涉及任何缓存。

测试它的方法是使用 .htacess 配置您的系统,并以与任何 Web 服务器相同的方式对其进行负载测试。然后配置不带 .htaccess 的系统并运行相同的测试。

比较和对比您配置的系统的结果。