我在Django 1.0.4中有项目-是的,我知道它很旧。
我想让未登录的用户无法访问媒体(音频)文件。 对nginx进行更改后,登录用户也无权访问。
我尝试使用视图和网址功能-没有结果
我的nginx设置:
location /media/content/audio/ {
deny all;
}
我的功能和网址
@login_required
def protected_serve(request, path, document_root=None, show_indexes=False):
if not request.user.is_authenticated:
raise Http404()
else:
return serve(request, path, document_root, show_indexes)
urlpatterns += patterns('',
(r'^media/content/audio/(?P<path>.*)$', protected_serve),
)
答案 0 :(得分:0)
您非常接近将整个难题组合在一起。您需要做两件事:
配置NGINX,您确实希望能够提供来自特定文件夹的数据,但是该文件夹不是公开的。从文件夹发送文件的授权将来自NGINX背后的应用程序,而不是来自对NGINX的外部请求。
让您的django应用将对NGINX的响应发送给NGINX,NGINX理解为这意味着“将保护区中的文件保存在1中”
您实现第一个目标的方法是使用config指令“ internal”
实现第二个目标是使用HTTP响应标头“ X-Accel-Redirect”作为上述注释中的@ralf状态。
以下是有关该主题的博客文章:https://clubhouse.io/developer-how-to/how-to-use-internal-redirects-in-nginx/
可以帮助您实现相同目标的Python项目:https://pypi.org/project/django-transfer/
NGINX文档:https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/