我有一台 Windows Server 2003 R2 32 位计算机,运行 Apache 2.4.2、OpenSSL 1.0.1c 和 PHP 5.4.5(通过 mod_fcgid 2.3.7)。此配置工作正常,但随后无法通过其域名(例如)访问该网站,www.example.com
但仍可以通过其 IP 地址访问该网站。
特别是,虽然https://www.example.com/
产生了连接错误,但http://123.1.2.3/
工作正常。是的,首先是 https,然后是 http。
错误和访问日志很干净,也就是说,它们没有显示任何问题的迹象。只有常见的消息,这些消息在网站无法访问时被中断。
经过一番调查,只需重启 Apache 即可解决问题。不幸的是,我没有机会测试它是否https://123.1.2.3/
也能正常工作,或者是否http://www.example.com/
仍然像往常一样重定向到 https。
那么,有人知道发生了什么吗?在我厌倦 Apache 并放弃它转而使用 Nginx 之前?
编辑:一些日志信息。
最后一行sslerror.log
是问题发生前 90 分钟的,所以我想这并不重要。ssl_request.log
也没有显示任何有趣的内容:这是问题发生前的最后两行:
[28/Aug/2012:17:47:54 +0200] x.x.x.x TLSv1.1 ECDHE-RSA-AES256-SHA "GET /login HTTP/1.1" 1183
[28/Aug/2012:17:47:45 +0200] y.y.y.y TLSv1 ECDHE-RSA-AES256-SHA "POST /upf HTTP/1.1" 73
前面的几行都一样,看起来也没什么意思,除了问题出现前 30-40 秒的 4 行:
[28/Aug/2012:17:47:14 +0200] z.z.z.z TLSv1 ECDHE-RSA-AES256-SHA "-" -
以下是相应的内容sslaccess.log
:
z.z.z.z - - [28/Aug/2012:17:47:14 +0200] "-" 408 -
...
x.x.x.x - - [28/Aug/2012:17:47:54 +0200] "GET /login HTTP/1.1" 200 1183
y.y.y.y - - [28/Aug/2012:17:47:45 +0200] "POST /upf HTTP/1.1" 200 73
好像有些连接超时了?
监听端口 80 的虚拟服务器通常会将所有连接重定向到 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
收到很多这样的警告,我猜这是正常的?
答案1
这听起来像是 DNS 问题。当无法通过名称访问网站时,您需要首先确保名称正确解析为服务器的 IP 地址。有很多方法可以做到这一点,例如执行nslookup
或甚至只是执行ping
名称。只有当您确实获得了正确的地址时,您才应该开始查看 Apache 端的情况。