2008-12-08 40 views
1

我使用Django作为Web框架,然后分别使用Apache和Lighttpd作为Web服务器和静态媒体服务器。 Lighty为我提供的所有静态内容都很好,但我需要将其配置为提供用户上传的新文件。 Lighttpd运行在与Apache(Django)不同的机器上。我创建一个目录然后创建一个映像文件的django代码在我的Apache机器上执行,使它当前被保存在同一台机器中。我希望这个目录和文件的创建发生在我的静态媒体服务器上,然后由媒体服务器自己来完成。 我使用os.mkdir和urllib.urlretrieve函数分别在Django(Apache)机器上创建目录和保存文件。无论如何,我可以做一些配置调整,以获得这些东西的工作,或者我需要在媒体服务器上编写脚本并从Django机器调用em?Lighttpd和Apache Django配置需要的帮助

回答

1

最简单的答案是用户上传到两个Web服务器均可访问的共享目录。然后立即可用。如果你使用unix(听起来像是这样),那么NFS是一个可能的解决方案。如果您认为您的网站将扩展到多台服务器,那么使用rsync推送到多个边缘服务器,甚至可能实施分片方案是另一种解决方案。

只要小心。根据您的应用程序,您需要考虑很多安全问题。

如果所有文件都转到可公开访问的目录,用户可能会猜测其他人文件的名称并下载它们。在这种情况下,您需要在Django中为他们提供顶层的安全机制。

永远不要相信你的用户!验证他们上传的内容是否在某个允许的集合中。在任何情况下,您都不应允许他们上传任何他们想要的内容。除非你的用户是一个值得信赖的人。即使这样你应该做一些检查。他们可能不应该为其中一个上传.php文件。你想给他们的最后一件事是能够在你的服务器上运行任意脚本。至少将目录配置为只提供文件而不执行任何操作。

好运

+0

非常感谢。 NFS像一个魅力工作,我正在尽我所能,使其安全。我想我正在处理你提到的几乎所有的安全问题。再次感谢。 – Bharath 2008-12-12 07:18:35

0

这是我使用rsync的东西。在主服务器上执行任何您喜欢的操作,然后定期(或按需)将rsync推送到静态服务器。 Rsync比通过快速入侵可以产生的任何东西都要快(并且更有特色)。

仅仅因为我是偏执狂,我把我的所有客户网站的每小时rsync做到2个备份服务器,其中一个在我的车库。我对一个1.7GB的客户站点(它没有任何改变)计时了一个“rsync -a”,并且花费了9.92秒的挂钟时间,其中包括用于rsyncing 3个不同目录的3次网络握手。如果有任何改变,presto-bango,它完成了,包含时间戳,所有者/组等。

当你得到真实的,多机器,无人参与的备份时,加工。我睡得很好。

+0

感谢您的评论,但使用rsync可能需要我们先暂时从Web服务器本身提供文件服务,然后执行从静态文件服务器提供的rsync推后它的机制。 NFS现在运行良好,我们将看看rsync是否会在未来以任何方式帮助我们。 – Bharath 2008-12-12 07:22:40