已回答此問題here。NGinx&Django,提供大文件(3GB +)
我在服務大文件下載/上傳(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被截斷。我跟蹤誤差:
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秒)
感謝您的幫助!
我會盡量找到django的問題,但它不是登錄/顯示任何錯誤! – rsm
然後你需要做一些調試。我不是一個Python程序員,也不是一個編程問答網站,所以我沒有更多的幫助。 – womble
我以爲這是ServerFault的問題,而不是S.O,因爲它幾乎與「服務器設置」有關,但是感謝您指出它,並感謝您的幫助! – rsm