一个虚拟主机的HTTPS失败

好吧,这听起来像是一个奇怪的问题…我很犹豫,甚至在这里发布,因为我不能很好地处理如何描述它,更不用说从哪里开始寻找解决scheme。

我有一个站点(Fedora 24,标准的LAMP堆栈,运行在Amazon EC2上),当通过HTTPS请求时,最近开始响应空白页面。

所以举个例子,如果你浏览http://example.com/coolscript.php,它可以正常工作,但是http://example.com/coolscript.php返回一个空白页面。 Web服务器日志显示两者都是HTTP 200,但HTTPS版本没有返回数据(后者,如下所示):

1.2.3.4 - - [22/Dec/2016:16:19:39 +0000] "GET /coolscript.php HTTP/1.1" 200 9069 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 1.2.3.4 - - [22/Dec/2016:16:19:25 +0000] "GET /coolscript.php HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 

我曾经尝试过不同的浏览器,个人电脑,networking等,所有的回应都是空白的。

你可能会觉得我有些东西与Apache中的虚拟主机定义混淆了,但是访问简单的文件(甚至是PHP脚本)可以正常工作。 该证书是有效的,好去。 在同一台服务器上的其他支持HTTPS的站点可以很好地使用不同的证书,甚至使用相同证书的虚拟主机别名也能正常工作。 只有一个主机名,通过HTTPS失败。 (Kicker:工作的别名在相同的虚拟主机定义中被定义为不同的虚拟主机定义)

我看了很多不同的领域希望能find问题,但我很茫然。 build议,意见还是狂妄的欢迎。 🙂


UPDATE

原帖之后的几个星期,我又遇到了同样的问题,但是这一次HTTP失败了,HTTPS很好。 再一次,只为一个虚拟主机(默认)。 一个tcpdump显示没有内容:

 HTTP/1.1 200 OK Date: Thu, 05 Jan 2017 14:33:48 GMT Server: Apache/2.4.25 (Fedora) OpenSSL/1.0.2j-fips PHP/5.6.29 mod_perl/2.0.10 Perl/v5.22.2 X-Powered-By: PHP/5.6.29 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: private Pragma: no-cache Content-Length: 0 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 

还是让人迷惑,可能更是如此。


2017年2月8日更新

“空虚拟主机问题”今天又回来了,只在一个虚拟主机上使用HTTP。 在apache的服务器状态中,不良连接显示为:

 4-1 26987 0/2/32 R 1.55 3 223 0.0 0.02 0.13 1.2.3.4 http/1.1 4-1 26987 0/2/22 R 1.47 4 0 0.0 0.01 0.10 1.2.3.4 http/1.1 4-1 26987 0/1/10 R 0.07 4 2 0.0 0.00 0.19 1.2.3.4 http/1.1 

而不是:

 2-1 26210 0/22/73 W 15.51 0 0 0.0 0.06 0.38 1.2.3.4 http/1.1 vhost.com:443 GET /server-status HTTP/1.1 

值得注意的是,VHost列在坏连接上是空的,所以我有一个新的方向来关注。

干杯迈克

Content-Length: 0如果你真的直接从Apache httpd(而不是一些中间代理)收到头文件,意味着Apache一开始就确信没有更多的数据来自PHP。 所以一旦脚本运行,PHP就退出了。 你需要ini_set("log_errors", 1); 正如杰拉德所build议的。

此外,build立内存监视,至less运行vmstat 1并看问题的请求,colums cachefree ,也许PHP脚本导致内存不足。

可能的原因:在最近的systemd版本中,服务可以产生的“任务”数量是有限制的。 对于Fedora 24上的apache,它被设置为512,并且即使在轻负载的情况下也会限制服务器。 (对于我来说,线索是来自多个来源的“无法分岔”错误。)

解决方法是编辑“/usr/lib/systemd/system/httpd.service”,并将“TasksMax = infinity”添加到服务部分:

 [Service] TasksMax=infinity 

到现在为止还挺好。

好的,我终于find了真正的答案:caching

我已经打开了简单机器上的基本(1级)caching,偶尔caching会损坏,并导致网站失败,没有错误或输出,我可以find。

caching是每个主机完成的,所以一个会失败,而其他人很好。 当caching中损坏的文件过期时,问题会自行解决。

我的解决scheme:禁用SMFcaching和问题没有复发。

银衬:为了追求这一点,我find并修复了很多服务器的低效率问题! 🙂