windows-server-2012 – Apache随机停止提供HTTPS,但HTTP工作正常

前端之家收集整理的这篇文章主要介绍了windows-server-2012 – Apache随机停止提供HTTPS,但HTTP工作正常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们在 Windows Server 2012上有这个Apache:

服务器版本:Apache / 2.4.9(Win32)
Apache Lounge VC10 Server内置:2014年3月17日10:48:43

大多数情况下,它运行良好,但有时(随机,每周cca 3-4次),它停止在端口443上提供HTTPS,但继续在端口80上提供HTTP服务.当它停止提供HTTPS时,解决问题的唯一方法是重启Apache.

这似乎与此处的问题完全相同:Apache stops responding to http requests — https continues to work除了在我们的情况下,它是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提供的最后一行然后没有任何内容(我们的内部监控系统尝试连接每一分钟,所以应该有07:52:50记录,但它缺少). 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只是默默地关闭了那个端口.

在测试了各种配置之后,我们发现了问题并且服务器现在运行稳定了7天没有任何问题.

httpd.conf文件中的这个设置修复了这个问题:

AcceptFilter http none
AcceptFilter https none

以前,我们只有HTTP的AcceptFilter,第二行丢失了.

根据Apache documentation,Windows上的默认值为:

AcceptFilter http data
AcceptFilter https data

使用none值使用accept()而不是AcceptEx(),并且不会在连接之间回收套接字.

猜你在找的Windows相关文章