确保Off
在Apache 中将HostnameLookups设置为。
你说服务器是通过WAMP(Windows等效的LAMP)设置运行Apache,对吗?好吧,如果是这种情况打开httpd.conf
或apache2.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
设置为Off
在Allow from
/ Deny from
directive中使用完整主机名,也会触发整个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的一部分。但由于服务流量放缓,在公共生产系统上会非常糟糕。