我有一个本地 Web 服务器(运行 CentOS 5.5),用于托管我公司的内联网。服务器本身运行良好,网页也正常,但速度非常非常慢。我发现自己每天必须至少重启一次 httpd 服务,才能尝试获得某种合理的速度。
例如,在主页上,我有 11 个请求,firebug 告诉我花费了 406 毫秒,但它指定的“onload”是 6.47 秒。事实上,查看所有请求,我可以看到第一个请求直到 +4.9 秒后才得到处理(请求自开始以来的启动时间)。
作为一个对 Web 服务器相当陌生的人,我不知道那 4.9 秒发生了什么,更重要的是为什么要花这么长时间。406 毫秒来加载所有请求是可以的,但是 6.47 秒(在千兆网络上)就太慢了。
关于我应该注意什么以加快这一进程,有没有什么建议?
答案1
一定要确认您的 httpd 没有设置为执行反向查找,这可能会导致像这样的数秒停顿。我遇到过很多次这种情况,所以总是值得排除。具体来说,HostnameLookups 指令和用于记录的 %h 节可能会导致此行为。还有更多。您可以在测试期间通过服务器上的 tcpdumping 进行验证。如果您看到来自 Web 服务器的针对您的 IP 地址(或您可能正在通过的任何 NAT 地址)的 PTR 查找,则很可能是这个问题。以下是要看的地方:
- HostnameLookups 在某处检查允许/拒绝规则是否与域名有关,而不是 IP 范围,例如允许来自www.example.org或拒绝来自 example.org
- 具有类似 RewriteCond %{REMOTE_HOST} 条件的重写规则www.example.com(我在这个帖子里找到的最后两个)
- 在某个地方有来自 none 的 Deny (这导致问题再次出现),显然“none”不是一个合适的 apache 指令
- 获胜者是:在 LogFormat 指令中使用 %h 而不是 %a (无论 HostnameLookups 说什么,%h 都会为您提供主机名,而 %a 则会为您提供 IP 地址)