Apache 2.4中的KeepAlive会干扰表单提交

我刚刚升级了一台服务器到Debian Jessie,其中包括Apache 2.4.10(2.2版本)和PHP 5.6。

现在,在某些情况下,SSL站点不会在IE11和iPad Safari(不确定桌面Safari)上提交表单。 Firefox和Chrome都可以。 当它失败时,在IE中产生IE错误页面“这个页面不能显示”。 只是强调:我可以到达网站,看到表单,这是表单提交,然后失败。

这在某种程度上与KeepAlive和SSL有关。 如果我在SSL VirtualHost中closuresKeepAlive,问题就会消失。 (这是使用SNI,虽然其中一个显示错误的网站是第一个SSL)。 我正在使用mpm-itk(并在升级之前)。

在IE11中(在Windows 7上),它发生在* SSL(HTTPS)* Apache KeepAlive On,KeepAliveTimeout 5(默认)*表格上传文件(所以enctype = multipart / form-data)*,只有当文件是实际提供(没有文件或与其他字段没关系,即使是一个1字节的文件导致它失败,而不是依赖于文件大小)。 *只有在显示表格的60秒内开始上传(也就是说,如果您在按提交之前保留60秒就可以)

有什么失败的线索没有线索。 服务器日志中没有任何内容显示它再次联系服务器。 错误是直接的。 除了在networking页面的结果栏中显示“(Aborted)”和“导航发生:File:dnserror.htm”,我认为它只是显示的页面之外,IEdebugging器中没有任何内容,名称没有dns错误,据我所知。 当我按提交button时,提琴手没有显示networkingstream量。 在Windows事件查看器中没有任何相关的东西。 这是最奇怪的事情 – 它似乎没有尝试。

对于Apache 2.4,我已经按照以下build议设置了SSL: https : //mozilla.github.io/server-side-tls/ssl-config-generator/?server= apache-2.4.10 &openssl=1.0.1k&hsts=no&profile =中等 。 CiperSuite与我的2.2版本没有任何区别,但OCSP装订已经开始。 2.4的主要变化是TLS1.2(但菲德勒降级,我相信,所以这是不可能的)。 HSTS已打开,但以前是。 SSLLabs为网站提供A +评分,并不表示任何错误。

我已经尝试将KeepAliveTimeout更改为60; 并且还回到旧的BrowserMatch中“ MSIE ”nokeepalive ssl -ieanan-shutdown downgrade-1.0 force-response-1.0和BrowserMatch“ MSIE。 ”ssl-unclean-shutdown作为一个实验,我认为这确实有一些效果,即它在第一次尝试后才起作用。 但是从新启动的浏览器的第一次访问仍然失败。 可能这是因为它不能确定浏览器,直到SSL协商到时候为时已晚,但之后浏览器有更多的信息? 也有可能我在60秒内不能完成这个过程,所以第二次也是可以的。

我做了一个小testing网站,演示了这个问题: https : //iet.davidearl.uk 。 它有一个自签名的证书只是为了testing用例,所以首先会有一个证书警告,但真正的网站却不是这样的。 testing用例中的所有服务器端都会回显提交文件的文件名,否则HTML源代码将全部存在。

在iPad上,这个问题似乎更糟,如果有的话。 它似乎根本无法提交表格(虽然显示正常,不pipe是否有file upload)。 有时它只是挂起,有时它有一个内部生成的错误页面(“Safari无法打开页面,因为networking连接丢失”),取决于如何构build窗体。 再次,虽然,共同的因素是,如果你等待60秒,然后按提交button,它的工作原理。 用于PC(5.1.7)的老版本的Safari虽然工作正常。

IE9(另一个副本)Windows 7的行为类似于iPad Safari – 它只是挂起,除非您在显示表单后等待60秒。 Windows 10上的Microsoft Edge和Surface RT平板电脑上的IE也像IE11一样失败。 我也观察到一个例子,在访问服务器的PHP“file_get_contents(”https …“)在suceeding之前一直挂起60秒,之前立即工作。

我已经尝试http:// superuser.com/questions/516030/apache-2-4-on-windows-responds-slowly-hangs-when-serving-some-dynamic-pages – 没有改变这也许是相关的,但在他们的情况KeepAliveclosures没有影响; closures服务器防火墙暂时没有区别:http:// serverfault.com/questions/678009/windows-8-ie-10-tls-handshake-errors-to-apache-2-2-on-centos-6- 6我尝试了重新排列SSLCipherSuite,把ECDHE-RSA-AES128-SHA256放在更高的位置(例如:http:// serverfault.com/questions/677338/why-is-internet-explorer-11-无法连接到https站点-tls-1-2-is-ena)在“Internet属性”>“内容”上清除SSL状态没有任何区别。

显然有一个与KeepAlive和SSL有关的问题,这并不常见,但我对它是什么感到困惑,而且没有什么线索可以帮助我找出答案。 广泛的search没有产生任何帮助。

我遇到了完全相同的问题(花了好几天把我的头发拉在这一个!)。

发现这是一个在mpm-itk中的错误(参见http://lists.err.no/pipermail/mpm-itk/2015-September/thread.html )。 这个bug现在已经在昨天发布的最新版本中得到纠正。

你可以在http://mpm-itk.sesse.net/下载这个新版本,但是你必须自己编译它。 如果您按照自述文件中的说明进行操作,那将非常简单。

谢谢你的Q! 并cividesk的答案。 我也使用ITK(不知道为什么更多的人不 – 为虚拟主机之间的权限提供有用的分离)。

我不想重新编译东西来弄清楚这个bug,宁愿相信总有一天它会变成Jessie, apt-get会奇迹般地修复它。 但是我的客户不能等到那个时候!

我注意到某些版本的jQuery导致它发生在IE下。 所以我通过放弃使用的jQuery版本来修复一半的问题。 但Safari仍然是一个问题 – 有时候它有时候会静默地失败。

我得到这个工作的方式是在我编辑的Apacheconfigurationsetenvif.conf文件包括:

 BrowserMatch "Mac OS X" nokeepalive 

( 这个想法在其他地方应该得到 )

这样,Mac用户就可以closuresKeepalive了。 虽然我不怀疑这会减慢他们的一些事情,这比杀死用户体验/不工作国际海事组织好。