我为我的一位客户构建了一个在虚拟服务器上运行的 Web 应用程序。它包括可供他们上传文件的功能,但他们现在想将这些文件存储在办公室的服务器上。
最简单的方法是通过互联网将文件系统直接安装到虚拟服务器上。我有通过内部网络安装 NFS 的经验,但我不清楚在这种情况下是否可行。
有什么想法吗?我总是可以编写新软件来传输文件,但这是一个简单的解决方法!
注意:办公室中的服务器是在 Windows Hyper-V 环境中的虚拟服务器上运行的 Ubuntu 12 服务器。带有 Web 应用程序的 VPS 是 Ubuntu 11.04
答案1
没人提到SSHFS但是。如果你使用的是现代 Linux 发行版,并且可以通过 ssh 访问远程主机,那么操作非常简单:
sshfs user@hostname:/remote/directory /local/directory
性能是相当可以接受的(但如果您需要整个目录,它就不如 rsync 这样的流同步快)。
答案2
NFS 本质上是不安全的。对于通过互联网进行连接来说,它是一个非常糟糕的选择。
我喜欢提到 rsync 的帖子。我希望您无需使用 cron 来启动传输,而是可以直接从处理文件上传的代码中运行 rsync 作业。
上传完成后,将文件 rsync 到他们的服务器,完成。
我认为您需要与他们的服务器建立安全连接以进行传输。
如果您愿意,您可以将传入的文件放入要传输的列表中,在成功复制后删除名称,并为自己提供一些故障转移功能,以防连接出现问题。
正如其他人已经指出的那样,rsync 被设计用于处理文件组或层次结构(感谢拼写检查),因此这并不难实现。
答案3
NFS 可能天生就不安全,但这不是该服务的错。Telnet 和 FTP 也天生就不安全,但这两种方式在开放互联网上已经使用了几十年。如果建立了加密的 VPN 隧道,那么缺乏 NFS 加密就无关紧要了。
此外,如果防火墙配置为仅允许特定的远程主机地址连接到 NFS 挂载点,那么裸 NFS 连接基本上不会被黑客攻击,除非来自嗅探互联网流量的三个字母机构,并且他们可以使用强大的解密功能来破解您的加密远程连接。
我发现某些版本的 NFS 默认使用 UDP,这可能是 Internet 可靠性问题的根源。如果连接拥塞,UDP 数据包可能会丢失,并且不会自动尝试重新传输。如果您想要可靠的连接,请确保您的 NFS 在 Internet 上使用(或被迫仅使用)TCP 数据包。
答案4
NFS 挂载可以通过使用自动挂载来完成,它将在失败时继续尝试挂载,但我考虑通过管道使用它的唯一方式是使用 vpn 或其他安全连接(实际上,我不会考虑它,但你听起来对这个想法很执着)。
即使使用自动挂载,如果出现网络问题,并且您将其上传放在 NFS 挂载上,上传可能会失败或损坏,除非您将文件存储在本地,然后在上传成功时进行复制。