我使用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
我已经在视图上方写下了需要做的其他事情
我不确定是否应删除媒体别名,日志文件应告诉您是否存在问题

08-19 10:35