我们在Windows Server 2012上有这个Apache:
Server version: Apache/2.4.9 (Win32) Apache Lounge VC10 Server built: Mar 17 2014 10:48:43
大多数情况下,它可以很好地工作,但是不时地(每周3-4次)随时停止在端口443上提供HTTPS,但是继续在端口80上提供HTTP服务。当HTTPS停止服务时,解决问题的唯一方法是重新启动Apache。
这似乎是与这里一样的问题: Apache停止响应http请求–HTT继续工作,除了在我们的情况下HTTPS停止工作,HTTP是一直工作的。
我们已经启用trace6级别的冗长,以获得关于发生的事情的一些好的信息。 但是,日志是空的:
... [Sat Mar 21 07:51:50.577373 2015] [ssl:debug] [pid 3356:tid 2540] ssl_engine_io.c(999): [client ...:16529] AH02001: Connection closed to child 137 with standard shutdown (server ...:443) [Sat Mar 21 07:54:21.936742 2015] [ssl:info] [pid 4760:tid 432] AH01914: Configuring server ...:443 for SSL protocol ...
在这个日志中,我们可以看到最后一个请求的最后一行在07:51:50服务OK,然后没有任何东西(我们的内部监控系统试图连接每分钟,所以应该有07:52:50logging,但是缺less)。 07:54:21的下一行是在我们的内部监控系统超时并重启Apache服务之后。
我们的内部监控是在C#中,其输出是:
System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse() at ExecuteServicePageCheck(Object stateInfo)
我们的httpd-ssl.conf如下所示:
<VirtualHost _default_:443> ServerName ...:443 ServerAlias www.....com DocumentRoot ${US_ROOTF_WWW}/.../www/www SSLEngine On SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder on # Prefer PFS, allow TLS, avoid SSL, for IE8 on XP still allow 3DES SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+AESGCM EECDH EDH+AESGCM EDH+aRSA HIGH !MEDIUM !LOW !aNULL !eNULL !LOW !RC4 !MD5 !EXP !PSK !SRP !DSS" # Prevent CRIME/BREACH compression attacks SSLCompression Off # Commit to HTTPS only traffic for at least 180 days Header add Strict-Transport-Security "max-age=15552000" SSLCertificateFile ${US_ROOTF}/core/apache2/server_certs/....crt SSLCertificateKeyFile ${US_ROOTF}/core/apache2/server_certs/....key SSLCertificateChainFile ${US_ROOTF}/core/apache2/server_certs/....ca-bundle CustomLog "logs/.../www/access.ssl.%Y.%m.%d.log" combined ErrorLog "logs/.../www/error.ssl.log" LogLevel trace6 </VirtualHost>
还有什么我们可以做的,以获得有关正在发生的事情的任何信息? 我们没有来自Apache的任何错误消息,甚至没有在这个trace6级别。
请注意,我们在HTTP和HTTPS上都提供了更多的域,HTTPS上的所有域都会出现问题。 就好像Apache刚刚closures了那个端口。
经过各种configuration的testing,我们发现问题和服务器运行稳定7天,现在没有任何问题。
httpd.conf文件中的这个设置修复了这个问题:
AcceptFilter http none AcceptFilter https none
以前,我们只有http的AcceptFilter,第二行缺失。
根据Apache文档 ,Windows上的默认值是:
AcceptFilter http data AcceptFilter https data
使用无值使用accept()而不是AcceptEx(),并且不会在连接之间重新使用套接字。
那么我认为这是一个防火墙问题,你需要安装iptable来传递一些IP。 启用filter应该可以解决问题