我有一个运行Ubuntu 14.04 LTS最小系统(64位)的虚拟专用服务器。 我已经成功安装并设置了Vsftpd,它将图像提供给我的移动应用程序(该应用程序使用Apache Commons FTP客户端)。 大多数情况下,这是完美的作品,应用程序可以下载每个文件的请求,但有时这些文件无法正常下载。 /var/log/vsftpd.log文件在发生这种情况时logging下列条目:
Fri Aug 14 14:31:39 2015 [pid 28594] [ftp] FAIL DOWNLOAD: Client "{Client IP}", "{image file}", 0.00Kbyte/sec
值得注意的是,99%的客户login成功,这似乎是一个可以接受的速度。 我认为成功下载率接近70%,这是我的需求不能接受的。 该应用程序支持多种平台,我已经看到这发生在Mac,iOS和Android,所以我怀疑它的客户端设备造成的问题。
我已经在互联网上search了几个星期,试图让Vsftpd像它应该的那样工作,但是一旦它无法获取一个文件,它就会持续几分钟的失败,即使我在应用程序中有机制当文件传输出现错误时断开/重新连接FTP客户端。 这似乎是服务器不想在特定时间服务该特定设备。 最终,服务器将“克服它”,并允许客户端再次像下载图像一样。 而且,它似乎只是在个人的基础上影响客户。 即我的应用程序的客户端不在工作,但你的。
它似乎与防火墙有关,所以我去禁用我的防火墙只发现我的服务器没有启用任何防火墙规则,所以我不知道什么可能导致零星的下载失败,因为他们通常工作正如预期。 具体来说,这是我从iptables -L命令获得的输出:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:8333 ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data ACCEPT tcp -- anywhere anywhere tcp dpt:ftp Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
我的Vsftpd设置只允许匿名客户端通过我设置的密码进行连接。 他们只能读取根目录/ ftp。 我打算最终一次为数百或数千个客户提供服务,因此我将大部分数据/连接限制设置得非常高或设置为无限制。 这是我完整的/etc/vsftpd.conf文件:
listen=YES anonymous_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES data_connection_timeout=300 ftpd_banner=You shouldn't be accessing this outside of the app. Logout now or you will be blacklisted. secure_chroot_dir=/var/run/vsftpd/empty rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key seccomp_sandbox=NO anon_root=/ftp anon_max_rate=0 no_anon_password=no secure_email_list_enable=yes max_clients=0 pasv_enable=YES pasv_min_port=1025 pasv_max_port=65000 max_per_ip=100 one_process_model=YES
我在网上读到PAM导致问题的地方,所以我禁用了它,但是在禁用它之前我仍然遇到同样的问题。 它似乎有一点帮助。 值得注意的是,我不知道PAM是什么,或者它如何帮助/伤害过程。
问题是我使用虚拟专用服务器而不是实际的物理服务器? 我只是不明白如何服务器可以如此喜怒无常,没有防火墙和一个非常轻松的Vsftpdconfiguration。 任何帮助这个问题将不胜感激。 我对Linux和networking有一个公平的把握,但是这绝对不是我的舒适区。 让我知道,如果我忘了一些东西。 如果能够帮助我解决这个奇怪的问题,我很高兴添加任何内容或尝试任何请求。 提前致谢!
TL; DR
Vsftpd可以在70%左右的时间内正常工作,但有时会退出允许下载到某些客户端,而无需说明原因。 然后几分钟后再开始工作。 它一直为其他客户服务,没有问题。 请帮忙!
那么这在技术上不能解决我与Vsftpd的问题,但迈克尔汉普顿给了我一些build议,以解决缓慢,不可靠的文件传输的根本问题。 他build议我使用HTTP来提供文件,所以我使用了已经安装在我的服务器上的Apache2 HTTP服务器。 现在图像可靠地获取,我还没有看到任何连接或下载问题。 此外,我的应用程序现在使用HTTP比使用FTP更快地下载图像。
长话短说,如果有人用Vsftpd看到这一点,我build议尝试一个HTTP服务器,而不是完全绑定到使用FTP。 安装起来要容易得多,也没有太多的小问题需要处理。 迈克尔·汉普顿完全正确。 谢谢您的帮助!