NGinx&;Django,提供大文件(3gb+;)

NGinx&;Django,提供大文件(3gb+;),nginx,django,Nginx,Django,这个问题已经回答了 我在处理大文件下载/上传(3gb+)时遇到一些问题 当我使用Django时,我想服务器文件的问题可能来自Django或NGinx 在我的支持NGinx的站点中 server { ... client_max_body_size 4G; ... } 通过django,我以块大小提供文件: def return_file(path): filename = os.path.basename(path) chunk_siz

这个问题已经回答了


我在处理大文件下载/上传(3gb+)时遇到一些问题

当我使用Django时,我想服务器文件的问题可能来自Django或NGinx

在我的支持NGinx的站点中

server {
    ...
    client_max_body_size 4G;
    ...
}
通过django,我以块大小提供文件:

def return_file(path):
        filename = os.path.basename(path)
        chunk_size = 8192
        response = StreamingHttpResponse(FileWrapper(open(path), chunk_size), content_type=mimetypes.guess_type(path)[0])
        response['Content-Length'] = os.path.getsize(path)    
        response['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
        return response
这种方法允许我将600Mb~2.6Gb的下载量传递到2.6Gb,但下载量似乎被截断为2.6Gb。我跟踪了错误:

2015/09/04 11:31:30 [error] 831#0: *553 upstream prematurely closed connection while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /chat/download/photorec.zip/ HTTP/1.1", upstream: "http://unix:/web/rsmweb/run/gunicorn.sock:/chat/download/photorec.zip/", host: "localhost", referrer: "http://localhost/chat/2/" 
在阅读了一些帖子之后,我在我的NGinx conf中添加了以下内容:

   proxy_read_timeout 300;
   proxy_connect_timeout 300;
   proxy_redirect off;
但是我用
*1
而不是
*553*
得到了相同的错误

我还认为可能是Django数据库超时,因此我添加了:

DATABASE_OPTIONS = {
    'connect_timeout': 14400,
}
但它也不起作用。(通过开发服务器下载大约需要30秒)


谢谢你的帮助

来自nginx的错误表明上游关闭了连接,因此这是django的问题。我建议在django日志中查找错误和调试信息。

对于大文件,请尝试将NGINX本身与
X-Accel一起使用。NGINX用于服务器静态内容,而Django用于应用程序逻辑

更多信息
还有。

我将尝试找出django的问题所在,但它不会记录/显示任何错误!那么,您需要进行一些调试。我不是Python程序员,而且这也不是一个编程问答网站,因此我不会提供更多帮助。我认为这是一个针对ServerFault而不是S.O的问题,因为它主要是关于“服务器设置”,但感谢您指出这一点,并感谢您的帮助!