是否可以在接受 BITS 上传的 IIS 服务器上使用弹性负载均衡器?

是否可以在接受 BITS 上传的 IIS 服务器上使用弹性负载均衡器?

我有一个使用 IIS 8.5 在 EC2 上托管的网站。我有一个启用了 BITS 上传的虚拟目录,当我的 URL 指向实例的公共 EIP 时,一切都可以通过 http 和 https 运行。

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

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

我们假设,由于 BITS 使用扩展的 HTTP 动词(例如BITS_POST),因此可能某些 ELB 魔法会破坏我们的标头。在尝试设置 WireShark 进行深入挖掘之前,我想检查是否有其他人遇到过此问题。

答案1

尽管 AWS 声称截至 2013 年底,ELB 已支持所有 HTTP 动词,但我遇到了同样的问题,并且不得不使用 TCP 转发来使 BITS 上传通过 ELB 进行。

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

  • HTTP BITS 从 VM1 上传到 VM2 的弹性 IP 成功。
  • 从 VM1 到 VM2 的弹性 IP 的 HTTPS BITS 上传成功。
  • HTTPS BITS 从 VM1 上传到配置了 HTTPS(第 7 层)并带有 SSL 卸载的 VM2 的 ELB,指出实例的 HTTP 绑定失败。
  • HTTPS BITS 从 VM1 上传到 VM2 的 ELB(配置为 TCP 转发(第 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 对应于无效索引异常,正如您在另一个 Stack Overflow 问题,失败请求跟踪显示 bitssrv.dll 中发生了异常,但我无法在日志中识别任何可操作的内容。

相关内容