Apache 随机停止提供 HTTPS 服务,但 HTTP 运行正常

Apache 随机停止提供 HTTPS 服务,但 HTTP 运行正常

我们在 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 请求--https 继续工作但在我们的例子中,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 悄悄关闭了该端口一样。

答案1

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

httpd.conf 文件中的这个设置解决了该问题:

AcceptFilter http none
AcceptFilter https none

以前,我们只有 http 的 AcceptFilter,缺少第二行。

根据Apache 文档Windows 上的默认值为:

AcceptFilter http data
AcceptFilter https data

使用没有任何value 使用 accept() 而不是 AcceptEx(),并且不会在连接之间回收套接字。

答案2

嗯,我认为这是一个防火墙问题,你需要安装 iptable 来传递一些 IP。启用过滤器应该可以解决问题

相关内容