我们希望使用类似于django nginx x-accel-redirect设置的东西来为django提供受保护的媒体。
唯一的问题是静态文件不是位于面向公众的django / nginx机器上,而是位于通过http / rest api流式传输文件的内部机器上。
目前我们在nginx机器上下载该文件并通过nginx x-accel-redirect提供,但我们希望优化此部件并寻找选项。 x-accel-redirect对从其他源流式传输的文件存在已知问题。
我们正在考虑使用django本身作为准缓冲区,但是对其他选项开放,例如集成诸如whizzer / twisted之类的东西,或者甚至可能完全拥有其他服务。
提供这些静态文件和保护安全性的最佳选择是什么?
答案 0 :(得分:3)
使用:http://www.allbuttonspressed.com/projects/django-filetransfers
为内部机器的http / rest api创建自己的Django存储后端,返回 一个File对象,并将该对象传递给filetransfer的server_file函数。
这就是我在Mayan EDMS https://github.com/rosarior/mayan/blob/master/apps/documents/views.py#L300
中的表现django-storages的后端可以帮助您入门。
https://bitbucket.org/david/django-storages/wiki/Home
更新
Django_resto似乎有一个基于http的存储类
https://github.com/aaugustin/django-resto/blob/master/django_resto/storage.py#L62
答案 1 :(得分:1)
我使用django-http-proxy做了类似的事情。这假设图像服务器至少与django服务器一样可靠。
然后在我的网址中,我只是将网址映射到http代理视图,例如:
(r'^protected/.*$', 'httpproxy.views.proxy'),
然后相应地配置了PROXY_FORMAT。
答案 2 :(得分:1)
在媒体机器中实现一个简单的一次性签名系统,使用任何非常薄(django可以,因为它不需要访问数据库)代码层,以及nginx中的x-accel-redirect。
在auth机器中,仅在允许用户获取资源时生成正确的签名,并将302返回到签名媒体。
签名可能是基于时间的,在几分之一秒内到期,因此嗅探器无法再次使用该URL。
答案 3 :(得分:1)
您可以使用lighttpd来处理流式传输。它有一个很好的模块来保护带有签名的资源:http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload
所以我认为你可以让nginx只代理流媒体服务器(那个< lighttpd)。
烹饪签名非常容易,这里有一个蟒蛇示例:init.py#cl-27"> https://bitbucket.org/ionelmc/django-secdownload-存储/ SRC / be9b18701015 / secdownload_storage /的初始化强>的.py#CL-27