htaccess的加载时间影响


15

一般来说,在Apache上处理内容有两种可能性:

  • 使用htaccess文件一一配置文件夹

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

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

Answers:


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

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

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


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

与您的指令位于main中时不同httpd.conf,该指令仅需要apache解析一次,在启动时,每个.htaccess文件都需要为每个请求重新解释。

除了IO操作外,解析.htaccess文件的开销取决于其复杂性。

将需要仔细确定基准。


4

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

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

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


1

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

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

更多信息:


1

我已经测试了有没有.htaccess,并且在速度或开销上都没有任何区别。当然,我只运行16个站点,而且它是一台超快速的服务器,因此在我看来,跟踪毫秒几乎是不可能的。在运行数百个站点的服务器上,开销可能很明显,因此@Iain表示要测试一下。

我个人使用.conf文件作为虚拟主机来执行所有操作,而不是使用.htaccess进行操作,它使我可以对所有内容进行绝对控制,它更干净,并且一次加载到apache的内存中。甚至我的wordpress重写规则都在我的.conf文件中,因此它永远不会中断。


超快有多快?
詹姆斯·柯比

@James Kirkby我稍后会在办公室外发送给您确切的服务器规格。我正在Proxmox容器中运行所有内容。我的网络服务器和我的16个WordPress网站在Google Pagespeed上的得分均为91-96,我一直都在进行调整和优化。
MitchellK

@JamesKirkby它具有2个6个核心处理器和64 Gb的Ram,分别运行Ubuntu 14.04,Apache 2.4.7和PHP-FPM。这有点令人着迷,我对它的表现感到欣喜若狂。
MitchellK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.