Intranet 访问服务器比通过 Internet 访问速度慢

Pra*_*bhu 6 networking windows-7 windows-xp

我的 Intranet 中有许多计算机在同一子网中,通过集线器连接。子网中的所有计算机都从路由器的内置 DHCP 获取 IP。此外,所有计算机都从同一路由器获得 Internet 连接。

192.168.0.67在同一子网中的其中一台计算机 ( ) 中有一台 Internet 服务器。它有 Windows XP、Apache、MySQL 和 Perl。该网站在localhost. 当我尝试192.168.0.100使用 Windows 7在客户端计算机 (IP ) 中加载该站点时,即使加载一个简单的页面也需要 5-10 分钟。但是,当我从 Internet 加载站点时,它加载得很快。无论我使用哪种浏览器,它都很慢。我在两台计算机上都禁用了 Windows 防火墙和防病毒软件。

当我检查taskmgr网络负载时,它消耗了大约 0.1-0.2%。在性能选项卡中,CPU 使用率约为 10%,两台计算机都有足够的内存

当我ping使用低负载服务器时,它表现良好。但是当我以高负载(高于ping server -l 15000)ping 服务器时, 许多数据包丢失了。

Gia*_*968 6

确保 HostnameLookupsOff在 Apache 中设置为。

你说服务器运行的是Apache,对吗?好吧,如果是这种情况,请打开httpd.confapache2.conf(完全取决于它在您的设置中的安装方式;这两个文件基本相同)并在其中查找配置行HostnameLookups。默认情况下HostnameLookups设置为Off如注释中所述,该注释应HostnameLookups位于该文件中的设置正上方;大胆的强调是我的:

HostnameLookups:记录客户端的名称或仅记录其 IP 地址,例如 www.apache.org(开启)或 204.62.129.132(关闭)。默认是关闭的,因为如果人们必须有意地打开此功能,它对网络整体而言会更好,因为启用它意味着每个客户端请求将导致至少一个对名称服务器的查找请求。

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

默认设置为关闭,以便为那些并不真正需要完成反向查找的站点节省网络流量。这对最终用户来说也更好,因为他们不必忍受查找带来的额外延迟。负载较重的站点应该关闭此指令,因为 DNS 查找可能需要相当长的时间。

不要对Allow from/Deny from指令使用主机名。

另外,您是否有任何使用 Apache Basic Auth 的目录或指令?可以在 Apache 中设置的简单密码保护是什么?我记得在某些情况下,有与连接到主机名查找速度变慢Allow from等领域的Allow from localhostAllow from localhost将其注释掉或设置为Allow from 127.0.0.1 ::1然后重新启动 Apache 将清除它。

正如官方 Apache 文档中所解释的,即使在/指令中HostnameLookups设置为Off使用完整的主机名,也会触发整个 DNS 查找链,从而降低访问速度;大胆的强调是我的:Allow fromDeny from

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

博客文章还解释说好听一点,如果你愿意阅读如何更多详细信息Allow from/Deny from条目拥有的主机名,而不是原始IP地址,可以减缓因为多个DNS查询的Apache访问:

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

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

Allow from .example.com
Run Code Online (Sandbox Code Playgroud)

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

Allow from localhost
Run Code Online (Sandbox Code Playgroud)

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

您可能还认为查找 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
Run Code Online (Sandbox Code Playgroud)

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