Apache在局域网上的其他计算机上比在localhost上慢


2

我有很少的电脑连接到网络。该网络中有一台托管WAMP的服务器(Windows + Apache + PHP + MySQL)。安装了Windows 7 x32 Pro。我可以从我的无线连接服务器ping该服务器,所有ping都是1ms。有趣的是,当我在服务器上浏览我的Web应用程序时,它会在眨眼之间加载。我可以浏览子页面,就像它们是我正在切换的图像一样。

但是在其他计算机上它工作得更慢。这不是悲剧,但明显变慢。在某些情况下,浏览器显示“等待......”需要一到两秒钟,这是最痛苦的。

我发现当我通过远程桌面连接时,在服务器上使用应用程序比在任何其他计算机上快得多。如果我可以对它们产生同样的效果,那将是非常棒的。

当我在chrome中查看开发人员控制台时,我可以看到:DOMContentLoaded在服务器上是400-600ms,在每台其他计算机上是1400ms。

在那种情况下我该怎么办?


您是否已将Apache配置为侦听所有内容(而不是默认的localhost)?您的LAN上有代理服务器或代理设置吗?
Kinnectus 2014年

apache是​​否在做任何DNS,可能是为了记录?
大卫施瓦茨2014年

WAMP是有线还是无线?和其他电脑?
edumgui 2014年

你是如何准确地进行测量的?但它的逻辑是loalhost会更快。
Ramhound 2014年

好的 - 希望您了解当您从托管它的服务器运行它时,它不会通过网络; 当您从任何其他计算机访问时,您正在通过网络,因此受到网络速度/容量/等的影响。
Debra 2014年

Answers:


1

确保Off在Apache 中将HostnameLookups设置为。

你说服务器是通过WAMP(Windows等效的LAMP)设置运行Apache,对吗?好吧,如果是这种情况打开httpd.confapache2.conf(所有取决于它在您的设置中的安装方式;两个文件基本相同)并寻找其中的配置行HostnameLookups。默认HostnameLookups设置Off为注释中所解释的,该注释应HostnameLookups位于该文件中的设置正上方; 大胆的重点是我的:

HostnameLookups:记录客户端的名称或仅记录其IP地址,例如www.apache.org(on)或204.62.129.132(off)。默认设置是关闭的,因为如果人们不得不故意启用此功能,那么它对网络来说总体上会更好,因为启用它意味着每个客户端请求将导致至少一个查询请求到名称服务器。

Apache官方文档进入更深的细节,以及; 再次大胆的重点是我的:

默认值为Off,以便为那些不需要完成反向查找的站点保存网络流量。对最终用户来说也更好,因为他们不必承受查找所需的额外延迟。重载网站应该将此指令保留为关闭,因为DNS查找可能需要相当长的时间。

不要将主机名用于Allow from/ Deny from指令。

此外,您是否有任何使用Apache Basic Auth的目录或指令?哪个是Apache可以设置的简单密码保护?我记得在某些情况下,与连接到Allow from诸如a等字段的主机名查找相关的减速Allow from localhost。注释掉Allow from localhost或设置它Allow from 127.0.0.1 ::1然后重新启动Apache将清除它。

正如官方Apache文档中所解释的那样,即使HostnameLookups设置为OffAllow from/ Deny fromdirective中使用完整主机名,也会触发整个DNS查找链,从而减慢访问速度; 大胆的重点是我的:

允许访问此字符串名称匹配或结尾的主机。只匹配完整的组件,因此上面的示例将与foo.apache.org匹配,但它与fooapache.org不匹配。无论HostnameLookups指令的设置如何,此配置都将导致Apache对客户端IP地址执行双向反向DNS查找。它将对IP地址执行反向DNS查找以查找关联的主机名,然后对主机名执行正向查找以确保它与原始IP地址匹配。仅当前向和反向DNS一致并且主机名匹配时才允许访问。

这篇博客文章也很好地解释了如果你想了解更多关于如何Allow from/ Deny from具有主机名而不是原始IP地址的条目的详细信息- 由于多次DNS查找,可能会减慢Apache访问速度:

但是,我最近遇到了这样一种情况:我们无意中在没有明确启用HostnameLookups的情况下做了相同的操作。怎么样?通过限制基于远程主机名的访问!阅读Allow指令的文档,在“A(部分)域名”部分下:

无论HostnameLookups指令的设置如何,此配置都将导致Apache对客户端IP地址执行双向反向DNS查找。它将对IP地址执行反向DNS查找以查找关联的主机名,然后对主机名执行正向查找以确保它与原始IP地址匹配。仅当前向和反向DNS一致并且主机名匹配时才允许访问。这很有道理,但使用类似的东西可能会产生意想不到的副作用:

Allow from .example.com

在我们的案例中,这是一个更不明显的案例,并没有让我们想到主机名:

Allow from localhost

在这里写了localhost,可能是为了节省一些努力或者可能增加清晰度而不是写出127.0.0.1(IPv4)和:: 1(IPv6)。在心理上,它很容易查看“localhost”是127.0.0.1和:: 1的直接别名,我们可以忘记名称“localhost”只是一个约定,并且需要像任何其他名称一样查找。那些熟悉MySQL数据库的人可能知道它实际上为“localhost”这个词赋予了特殊的混淆含义,以便建立UNIX套接字连接而不是到127.0.0.1的TCP连接或者在系统上定义的任何“localhost”!

您可能也认为查找127.0.0.1很快,因为它通常映射到/ etc / hosts中的“localhost”。是的,但是不在/ etc / hosts中的每个其他访问者都会获得慢速的DNS PTR查找!根据操作系统的不同,您可能会在/ etc / hosts中看到“ip6-localhost”或“ip6-loopback”(Debian 7,Ubuntu 12.04),“localhost6”(RHEL 5/6,Fedora 19)或其他内容。因此,拼出地址很重要:

Allow from 127.0.0.1
Allow from ::1

这样做会立即停止隐藏的HostnameLookups行为并加快网站的速度。在这种情况下,这不是一个问题,因为它是一个私人的内部网站,任何人都不能通过防火墙进行访问,因此流量水平相对较低。该访问控制是为什么首先需要允许localhost的一部分。但由于服务流量放缓,在公共生产系统上会非常糟糕。

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.