【问题标题】:Apache Site Slow To Load, possibly allowoverride or rewrite issueApache 站点加载缓慢,可能允许覆盖或重写问题
【发布时间】:2012-07-14 18:35:07
【问题描述】:

我发现我的网站加载第一页的速度很慢,但在那之后就很好了,一些使用 apache 配置的试验表明可能是以下问题之一:

  1. AllowOverride - 我知道将 AllowOverride 设置为 All 会降低站点速度,因为它会在每个文件夹中查找 .htaccess 文件,因此我将配置移到了虚拟主机文件中并设置了 AllowOverride None 因此关闭 .htaccess 文件,这最初似乎可以解决问题,但是当我再次尝试时,问题又回来了,所以也许不是那样。

  2. 我删除了 AllowOverride 行,因此它默认恢复为此的默认设置(无)。这似乎有所帮助,但有时仍会再次发生。

  3. 可能是重写规则是:

    RewriteEngine On              
    
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?example\.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !google. [NC]
    RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
    RewriteCond %{HTTP_REFERER} !msn. [NC]
    RewriteCond %{HTTP_REFERER} !yahoo. [NC]
    RewriteRule ^.*$ - [F]    
    
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    

但是有些网站不使用这个,事实上甚至不使用重写并且仍然很慢所以这似乎也不是问题。

有什么想法吗?

已编辑:

问题不在于网站,因为即使是只有“Hello World”的简单 HTML 也有问题。

它在以前版本的 Apache 上运行良好,但自从升级到 2.4(当很多事情发生变化时,尤其是配置发生变化时)它变得很慢。

【问题讨论】:

  • "...加载第一页很慢,但之后就很好了..." 你找错地方了。开始使用 Firebug / Pagespeed 或等价物来整理您的内容缓存。
  • 我想你误会了,延迟是在你到达网站之前,就像某种服务器问题一样。网站加载后速度很快,您可以毫无问题地四处走动。第一次加载一个只有“hello world”的网站甚至很慢,所以内容不是问题。
  • 您是否托管在共享服务上?
  • 如果它是您自己的服务器,则可以选择使用strace 来计时发生的事情。我有一个测试虚拟机,它广泛地反映了我的产品堆栈,我已经使用 strace 来很好地解决这样的问题。例如。 here 虽然我发现在调试器模式下启动 Apache 更容易做到这一点。
  • 我降级到 apache 2.2 似乎已经解决,所以看来是 2.4 问题

标签: apache .htaccess mod-rewrite


【解决方案1】:

我在使用 Apache 和 RewriteRule 加载 CSS、JS 和其他静态文件时遇到了一些问题。如果您也遇到此问题,请查看 Chrome 的开发者工具 > 网络。就我而言,.php 渲染速度很快,但我不得不等待 10 秒才能加载 .css 文件!如果这对你来说是一样的,我的修复可能也对你有用。既然你说第一次加载很慢,后来的加载很快(在浏览器中缓存 css 文件)我猜它会:)

而不是让 RewriteRule 引擎处理所有静态文件并实际重写静态文件名......:

RewriteRule ^.*\.(jpg|gif|png|js|css|pdf|eot|woff|ttf|svg|ico)$ /$0 [L]

...最好不要打扰 RewriteRule 引擎处理静态文件名:

RewriteCond $0 !\.(jpg|gif|png|js|css|pdf|eot|woff|ttf|svg|ico|html)$

在您的情况下,您的静态文件没有专门的 RewriteRule,但也没有 RewriteCond,所以我猜所有请求都只是传递给 RewriteRule 引擎。

顺便说一句,我不知道为什么通过 RewriteRule 和 Apache (2.4) 加载静态文件会出现这样的问题。有人吗?

希望这对您也有帮助!

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 2016-09-05
    • 1970-01-01
    • 2018-02-11
    • 2010-12-01
    • 2012-01-03
    • 2013-02-12
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多