是否可以在接受BITS上传的IIS服务器上使用Elastic Load Balancer?

我有一个使用IIS 8.5在EC2上托pipe的网站。 我有一个启用了BITS上传的虚拟目录,当我的URL指向实例的公共EIP时,一切工作在http和现在的https上。

该devise要求在前面的实例中使用Elastic Load Balancer。 诀窍是,当我连接一个ELB,我开始得到BITS会话500错误。 我们已经确定,当我们不使用ELB时,作业会正确完成。

我们在IIS日志中看到的特定BITS错误是“无效索引”。 在HTTP 500错误中。 看到这个关于追踪BITS错误代码的问题。

我们有一个假设,因为BITS使用扩展的HTTP动词(比如BITS_POST ),也许ELB的一些魔术正在损坏我们的头文件。 在尝试设置WireShark深入挖掘之前,我想检查是否有其他人遇到了这个问题。

尽pipeAWS宣称ELB支持2013年末的所有HTTP动词,但我遇到了同样的问题,不得不解决使用TCP转发来通过ELB获取BITS上传的问题。

详细信息:我有两台服务器2012 R2虚拟机,一台位于colo(VM1)上的vSphere 5.5群集上,另一台位于AWS(VM2)上,均于2016年6月1日完全打补丁。 VM1使用PowerShell(Start-BitsTransfer -TransferType Upload)将文件推送到VM2(使用HTTP和HTTPS绑定运行IIS 8.5,后者使用CA颁发的证书)。

  • HTTP BITS从VM1上传到VM2的Elastic IP成功。
  • HTTPS BITS从VM1上传到VM2的Elastic IP成功。
  • HTTPS BITS从VM1上传到VM2的configuration为HTTPS(第7层)的ELB,使用SSL卸载,指向实例的HTTP绑定失败。
  • HTTPS BITS从VM1上传到configuration为TCP转发的VM2的ELB(第4层;无SSL卸载)到实例的HTTPS绑定成功。

子弹点3是我(似乎你)想要的,但选项4是我已经解决了,它的工作原理。

后人的错误细节(每年有50人遇到这个问题):调查选项3,VM1会抛出以下错误:

 PS C:\> $error[0] | Select-Object * writeErrorStream : True PSMessageDetails : Exception : System.Exception: Invalid index. TargetObject : CategoryInfo : InvalidOperation: (:) [Start-BitsTransfer], Exception FullyQualifiedErrorId : StartBitsTransferCOMException,Microsoft.BackgroundIntelligentTransfer.Management.NewBitsTransferCommand ErrorDetails : InvocationInfo : System.Management.Automation.InvocationInfo ScriptStackTrace : at <ScriptBlock>, <No file>: line 1 PipelineIterationInfo : {0, 1} 

VM2的IIS日志显示如下:

 #Software: Microsoft Internet Information Services 8.5 #Version: 1.0 #Date: 2016-06-03 01:08:56 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken 2016-06-03 01:20:52 xxx.xx.x.xx BITS_POST /upload/file.dat (bits_error:,500,0x80070585) 8080 - xxx.xx.x.xxx Microsoft+BITS/7.7 - 500 0 0 0 

正如你所说的,0x80070585对应于无效的索引exception,正如你在另一个堆栈溢出问题上logging的 ,失败的请求跟踪显示在bitssrv.dll中发生的exception,但我无法确定在日志中可操作的任何东西。