我使用Vhost由apache服务我的django。 conf文件如下
WSGIPythonPath /srv/www/myproject/testproject/
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.betarhombus.com
WSGIScriptAlias / /srv/www/testproject/testproject/testproject/wsgi.py
<Directory /srv/www/testproject/testproject/testproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /srv/www/testproject/testproject/static/
Alias /media/ /srv/www/testproject/testproject/media/
<Directory /srv/www/testproject/testproject/static>
Require all granted
</Directory>
<Directory /srv/www/testproject/testproject/media>
Require all granted
</Directory>
</VirtualHost>
我想将媒体文件限制为仅在特定的登录用户上提供。所以我遇到了XsendFile。如果我正确理解了django的功能,那么对要提供的媒体文件进行所有检查后,Apache会将其作为静态文件提供。所以,如果我猜对了,那么程序就在下面
激活XsendFile。
创建用于检查媒体文件权限等的视图并为其提供服务
与urls.py文件中的url关联
然后,我可以使用`,并且可以正常工作,就像使用初始媒体文件url进行投放一样。我理解正确吗?我的问题如下:
关于1.激活XSendFile。是否应该在Vhost标签内的conf文件中完成此操作?设置XsendFile是否足够?我是否应该删除媒体指令别名以及媒体文件部分?我只希望我的视图提供媒体文件吗?
还有什么我应该注意的吗?
编辑:我的设置是
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.betarhombus.com
WSGIScriptAlias / /srv/www/testproject/testproject/testproject/wsgi.py
XSendFile On
XsendFilePath /srv/www/testproject/testproject/media/
<Directory /srv/www/testproject/testproject/testproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /srv/www/testproject/testproject/static/
<Directory /srv/www/testproject/testproject/static>
Require all granted
</Directory>
</VirtualHost>
我的urls.py
#for xsendmedia file serving
url(r'^media\/(?P<path>.*)$', 'customer.views.media_xsendfile'),
和我的看法
def media_xsendfile(request, path):
#here will be checked if user can access media
response = HttpResponse()
response['Content-Type']=''
response['X-Sendfile']= smart_str(os.path.join(settings.MEDIA_ROOT, path))
return response
我的问题是某些媒体文件正常共享,而有些则不共享,并且出现内部服务器错误
最佳答案
还要确保像这样在您的Apache配置文件中设置XSendFilePath,
XSendFile on
XSendFilePath "//path/to/files/on/disk"
<Directory "//path/to/files/on/disk">
Order Deny,Allow
Allow from all
</Directory>
并在返回响应时将其包括在您的视图中:
response ['X-Sendfile'] = smart_str(file_path)
并回答您的问题:
激活vhost标签中的XSendFile
我已经在视图上方写下了需要做的其他事情
我不确定是否应删除媒体别名,日志文件应告诉您是否存在问题