Wap*_*pac 6 http https not-responding windows-server-2012 apache-2.4
我们在 Windows Server 2012 上有这个 Apache:
Server version: Apache/2.4.9 (Win32)
Apache Lounge VC10 Server built: Mar 17 2014 10:48:43
大多数情况下,它运行良好,但有时(随机,每周 cca 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
...
Run Code Online (Sandbox Code Playgroud)
在这个日志中,我们可以看到在 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)
Run Code Online (Sandbox Code Playgroud)
我们的 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>
Run Code Online (Sandbox Code Playgroud)
我们还能做些什么来获取有关那里发生的事情的任何信息?我们在任何地方都没有来自 Apache 的错误消息,甚至在这个 trace6 级别上也没有。
请注意,我们确实在 HTTP 和 HTTPS 上提供了更多域,并且所有这些域都在 HTTPS 上出现。就好像 Apache 只是默默地关闭了那个端口。
经过各种配置测试,发现问题,现在服务器稳定运行7天没有任何问题。
httpd.conf 文件中的此设置修复了问题:
AcceptFilter http none
AcceptFilter https none
Run Code Online (Sandbox Code Playgroud)
以前,我们只有 http 的 AcceptFilter 并且缺少第二行。
根据Apache 文档,Windows 上的默认值是:
AcceptFilter http data
AcceptFilter https data
Run Code Online (Sandbox Code Playgroud)
使用none值使用 accept() 而不是 AcceptEx() 并且不会在连接之间回收套接字。
| 归档时间: |
|
| 查看次数: |
8990 次 |
| 最近记录: |