我在Azure VM上设置FTP服务器时遇到问题。 在正常使用服务器运行很棒。通过被动FTP连接进行大量文件传输会出现问题。
设置
FTP-Server软件是FileZilla服务器。 Azure VM端点,Windows防火墙和Filezilla可配置为使用端口10000-10009进行被动连接。 客户端是第三方设备。
问题
在持续时间超过4分钟的大型文件传输中,连接将获得空闲超时。
我发现了一个Microsoft博客文章:
“当FTP传输大文件时,传输所用的时间可能超过4分钟,尤其是当VM大小为A0时。每当文件传输超过4分钟时,Azure SLB将超时空闲TCP / 21连接,一旦传输了所有数据,就会导致干净地完成FTP传输的问题。[..]基本上,FTP使用TCP / 21设置所有内容并开始传输数据。数据传输发生在另一个端口.TCP / 21连接在另一端口传输期间空闲。传输完成后,FTP尝试在TCP / 21连接上发送数据以完成传输,但SLB发送TCP改为重置。“
现在......对于我的第三方客户端,无法将其设置为发送TCP keepalive命令以避免空闲超时。
问题
如何告诉Azure VM在4分钟后不关闭idel TCP连接?
我甚至不明白为什么会发生这种情况,因为这违反了TCP规范(RFC 5382使得这一点特别清楚,正常情况下2h 4m)。换句话说,过早丢弃空闲连接的Azure不能用于长时间的FTP传输。
请帮忙!
此致
斯特芬
答案 0 :(得分:2)
我找到了两个解决方案!
<强> 1 强> 可以将VM端点的超时设置为最多30分钟。
执行此操作的Powershell命令是:
> Get-AzureVM -ServiceName "MyService" -Name "MyVM" | Set-AzureEndpoint -Name "MyEndpoint" -IdleTimeoutInMinutes 30 | Update-AzureVM
更多信息here。
2. :创建ILIP(实例级IP)
您可以创建ILIP以绕过VM Webservice enpoint层。执行此操作的PowerShell命令是:
Get-AzureVM -ServiceName “MyService” -Name “MyVM” | Set-AzurePublicIP -PublicIPName "MyNewEndpoint" | Update-AzureVM
更多信息here。
答案 1 :(得分:0)
我使用的是最新版本的Filezilla(3.14.1),您可以将Filezilla设置为发送Keep-Alive数据包,建议您首先尝试使用,而不是尝试更改默认的Azure负载 - 平衡器超时。但是,负载均衡器超时是用户可配置的(即:在您的控制之下),详细信息可在此处找到:https://azure.microsoft.com/en-us/documentation/articles/load-balancer-tcp-idle-timeout/
在Filezilla中设置keep-alive命令:
•打开FileZilla&#34;编辑&#34;菜单并选择&#34;设置。&#34;在Mac上,打开&#34; FileZilla&#34;菜单并选择&#34;首选项。&#34;
•选择&#34; FTP&#34; &#34;连接&#34;中的页面“设置”对话框的一部分。寻找&#34; FTP Keep-Alive&#34;页面的一部分。
•激活&#34;发送FTP保持活动命令&#34; &#34; FTP Keep-alive&#34;部分。这会在短时间间隔内在FileZilla和FTP服务器之间发送命令,重置超时功能并阻止服务器关闭连接。
希望有所帮助。