我使用在 Windows Server 2008 R2 上运行的 Apache 2.2 作为 WebDAV 服务器,供客户端上传大型媒体文件(大约 100-2000MB)。我发现,当我启用 SSL(openSSL 0.9.8o)并使用 HTTPS 进行上传时,吞吐量约为 13Mbps,但当我禁用它并仅使用 HTTP 时,吞吐量约为 80Mbps。我不明白为什么会发生这种情况,因为我的理解是繁重的 SSL 工作是在连接开始时完成的。
如果它有帮助,我正在使用的客户端是命令行 cURL,这里是命令:
curl -k -f -u digital:recorder -T 00320120321101048_ch1.mkv http://mediaserver/webdav/
curl -k -f -u digital:recorder -T 00320120321101048_ch1.mkv https://mediaserver/webdav/
有人知道为什么启用 SSL 会对性能产生如此大的影响吗?
干杯。
更新:Windows 7 客户端不存在此问题,因此这只发生在 XP 上。这至少表明问题出在客户端。我在两个系统上运行完全相同的命令行,但它只影响 WinXP。有人知道这可能是为什么吗?XP 不知何故削弱了 SSL 上传速度?
我也在 Fedora Linux 上进行了测试。所以现在问题已经更接近于:使用相同版本的 cURL + OpenSSL 将相同文件上传到相同服务器在 Linux 和 Windows 7 上速度很快,但在 Windows XP 上速度很慢。
有人能帮助我吗?因为我真的遇到了难题!
答案1
SSL 加密是一项 CPU 密集型任务。“繁重的 SSL 工作”并不是在连接启动后立即完成的,而是必须对整个文件上传进行加密。
检查启用和不启用 SSL 的情况下服务器的 CPU 消耗,您会看到很大的差异。
答案2
答案是,这是 Windows XP 处理 SSL 数据包的方式的问题。很奇怪,但确实如此。最后我们自己修改了 cURL 库以避免这个问题。
对于使用 Apache 作为 WebDAV 目标遇到此问题的其他任何人,我发现另一个选项是使用 SSLCipherSuite 指令将加密级别更改为 MEDIUM(默认值为 HIGH)。这意味着它使用 128 位 RSA 而不是 256 位 AES 加密,从而将吞吐量提高到几乎非加密速度级别。这可能对 IIS 服务器有帮助,也可能没有帮助,因为我还没有机会尝试这个。