主机不能被域名访问,只能通过IP:Apache的错误?

我有这个Windows Server 2003 R2的32位机器运行Apache 2.4.2与OpenSSL 1.0.1c和PHP 5.4.5通过mod_fcgid 2.3.7。 这个configuration在几个小时内工作得很好,但是那个网站不能通过它的域名联系到,比如说www.example.com ,但是它的IP地址仍然可以到达。

特别是,当https://www.example.com/产生连接错误时, http://123.1.2.3/工作得很好。 是的,先https然后http。

错误和访问日志是干净的,即他们没有出现问题的迹象。 只是通常的消息,这是中断的网站无法到达。

经过一番调查,Apache简单的重启解决了这个问题。 不幸的是,我没有机会testinghttps://123.1.2.3/也能正常工作,或者http://www.example.com/仍然像往常一样redirect到https。

那么,有没有人知道发生了什么? 在我厌倦Apache之前,抛弃它,转而赞成Nginx?

编辑:一些日志信息。

sslerror.log的最后一行是在问题发生前的90分钟,所以我猜这不重要。 ssl_request.log显示任何有趣的内容:这些是问题之前的最后两行:

 [28/Aug/2012:17:47:54 +0200] xxxx TLSv1.1 ECDHE-RSA-AES256-SHA "GET /login HTTP/1.1" 1183 [28/Aug/2012:17:47:45 +0200] yyyy TLSv1 ECDHE-RSA-AES256-SHA "POST /upf HTTP/1.1" 73 

以前的几行都是一样的,看起来并不有趣,除了这样的问题之前的30到40秒之外的4行:

 [28/Aug/2012:17:47:14 +0200] zzzz TLSv1 ECDHE-RSA-AES256-SHA "-" - 

这些是来自sslaccess.log的相应的行:

 zzzz - - [28/Aug/2012:17:47:14 +0200] "-" 408 - ... xxxx - - [28/Aug/2012:17:47:54 +0200] "GET /login HTTP/1.1" 200 1183 yyyy - - [28/Aug/2012:17:47:45 +0200] "POST /upf HTTP/1.1" 200 73 

似乎有些连接超时?

侦听端口80的虚拟服务器通常将所有连接redirect到https协议,所以access.log在问题出现前40分钟没有显示任何内容。 error.log在问题出现前4分钟显示一些警告:

 [Tue Aug 28 17:53:30.921034 2012] [fcgid:warn] [pid 1964:tid 1728] mod_fcgid: process 1852 graceful kill fail, sending SIGKILL 

得到很多这些警告,我猜这是正常的?

这听起来像一个DNS问题。 当站点名称不可达时,您需要首先确保名称正确parsing为服务器的IP地址。 有很多方法可以做到这一点,例如执行nslookup ,甚至只是ping一个名字。 只有当你确实得到正确的地址,你才应该开始看Apache的事情。