我们有一个需要启用SSL的Delphi SOAP服务。我选择使用IIS ARR反向代理来进行SSL卸载以便于配置(与OpenSSL和手动证书+密码短语管理相比)。 ARR可行,但它增加了大量的开销......响应时间从 2秒到19秒达到18个服务请求(总压缩约60Kb)。
我将时间戳记录添加到客户端&服务器用于何时发送和接收消息。它显示在从客户端发送和服务接收之间通过ARR向每个请求路由添加大约1秒。响应很快被路由回来,只有通过ARR的请求路由很慢(见下图)。
如何追踪开销的来源? ARR不适合这个用例吗?我尝试调整和禁用大多数设置,包括缓存。我尝试使用干净的IIS设置的不同主机,包括生产Windows Server 2012.SSL本身不是开销,只是让ARR HTTP反向代理导致延迟。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8987/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
请求&amp;来自Fiddler的回复样本:
答案 0 :(得分:7)
我们遇到同样的问题。我找到了根,它在System.Net.Sockets.Socket.DoConnect中 问题与IPv6有关:
http://msdn.microsoft.com/en-us/library/115ytk56.aspx
&#34;如果启用了IPv6并且调用了TcpClient(String,Int32)方法以连接到解析为IPv6和IPv4地址的主机,则将首先尝试在IPv4地址之前连接到IPv6地址。如果主机没有监听IPv6地址,这可能会延迟建立连接的时间。&#34;
要解决环回请求,您需要在计算机上禁用IPv6,请参阅第4-5-6页: https://stackoverflow.com/a/12403731
答案 1 :(得分:4)
我的建议:对应用程序使用IIS,使用Apache HTTP守护程序进行代理。
过去我曾使用各种软件和硬件进行SSL卸载(从2003年的某个地方开始,我认为)。每个都有自己的定价水平和功能。在过去的几年里,我为了这个目的切换到单独使用Apache HTTP Daemon。即使与IIS和Windows结合使用。一旦运行样本,Apache就很容易配置,并且通过转发和重命名更容易扩展到更复杂的场景。
可以在http://www.invantive.com/about-invantive/news/entryid/897/ssl-offloading-for-apache-tomcat上找到有关如何在Windows上使用Apache HTTP守护程序作为SSL卸载引擎的一些说明。
答案 2 :(得分:1)
正如德米特里建议的那样,关闭IPv6解决了这个问题。
您也可以在重写中使用127.0.0.1而不是localhost来强制使用IPv4。
答案 3 :(得分:0)
我会说你的设置有些麻烦。我们目前运行ARR进行SSL卸载并进行大量吞吐量测试,ARR对吞吐量几乎没有影响。
我同意Brock的说法并首先检查您的App Pool设置。基本上应该将ARR应用程序池设置为永不回收。
我建议观看从第32-38集开始的剧集: http://dotnetslackers.com/articles/iis/Bindings-and-Rules-for-Application-Request-Routing-ARR-Week-32.aspx