显然,我的Apache httpd实例正在为每个传入的客户端连接的IP地址做反向DNS(RDNS,给我这个IP地址的主机名)查找。 这不好。 特别是因为有时候决议失败,PTRlogging丢失28秒后 。
诊断:我将%D添加到了我的“组合”日志样式中,并以这种方式查看了响应时间:对于那些使用主机名logging的logging,显示<1秒,对于那些logging了IP的logging显然是20秒。
这是我试过的:
server-status扩展。 HostnameLookups Off是否在configuration中。 Allow / Deny规则中mod_access没有被赋予任何主机名。 我错过了什么?
看来标准的Ubuntu 8.04 Apache httpd安装带有一个LogFormat ,它以%h开始,并执行客户端IP的RDNS查找。 为什么哦为什么? 用%areplace它(远程IP地址,请参阅自定义日志格式 )可以减less这个问题。 90%。 有些仍然…
你有没有validationHostnameLookups没有在其他指令中设置? 你有没有激活模块mod_authz_host?
有趣的是,我刚刚在我的一台服务器上遇到类似的问题。 这个问题在我运行一个命令行PHP脚本的时候就开始了,这个脚本扫描了顶级IP地址的日志文件。 然后,我让PHP对每个IP地址执行反向DNS查找。 在我做这个的时候,我注意到Apache突然开始将主机名转储到日志中,而不是IP地址。 从%h切换到%a并重启Apache似乎已经解决了这个问题。 HostnameLookups被设置为Off。 我的猜测是,如果恰好在caching中对IP进行反向查找,Apache只会使用本地caching的结果。 也许? 无论是这个或这是服务器中的错误。
我偶然发现了同样的问题,并且发现了反向查找的另一个来源:应用程序本身! PHP有gethostbyaddr()函数: