Django + Channels + Daphne + Caddy + Загрузка файла администратора = 413 Error

У меня есть веб-приложение Django, которое развернуто в производстве с помощью Caddy. Я использую Caddy в качестве обратного прокси-сервера, указывающего на daphne, который указывает на мое приложение Django. Однако, когда я пытаюсь загрузить файл размером 5 МБ на портал администрирования django в процессе производства, я получаю сообщение об ошибке 413. В режиме отладки, когда я просто использую Django (без caddy или daphne), я не получаю эту ошибку. У кого-нибудь есть идеи? Вот мой Caddyfile и связанные с ним файлы:

0.0.0.0:2015
on startup daphne peptidedb.asgi:application &

header / {
  -Server

    # be sure to plan & test before enabling
    # Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

    Referrer-Policy "same-origin"
    X-XSS-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"

    # customize for your app
    #Content-Security-Policy "connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src data: 'self'; object-src 'self'; style-src 'self'; script-src 'self';"
    X-Frame-Options "DENY"
}

proxy / localhost:8000 {
    transparent
    websocket
    except /static
}

limits 750000000

log / stdout "{combined}"

errors stdout

asgi.py

import os

from channels.routing import get_default_application
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "peptidedb.settings")
django.setup()
application = get_default_application()

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "peptidedb.settings")

application = get_wsgi_application()

person RubyJ    schedule 04.02.2019    source источник
comment
Я использовал каналы Django в производстве, но с NGINX, супервизором, Daphne, asgi.py и Redis. В этом случае с большими файлами у них нет проблем.   -  person Ishwar Jangid    schedule 05.02.2019
comment
Интересно. Я не уверен, откуда берется моя ошибка 413. Где-то установлен произвольный лимит файлов. Я исключил Джанго и Кэдди из-за вышеизложенного.   -  person RubyJ    schedule 05.02.2019


Ответы (1)


Похоже, когда приложение Django развернуто с каналами, Daphne и Caddy, этот параметр вступает в силу в settings.py.

DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 # value in bytes

Мне пришлось добавить этот параметр в файл настроек, и тогда моя загрузка большего файла работает. Странно то, что мне не понадобился этот параметр, когда приложение было развернуто только с Django в режиме отладки. Интересно, не может ли мое приложение при работе внутри контейнера докеров (разрешение? Размер?) Записывать/передавать большой файл на диск, поскольку это нормальное поведение Django (вместо записи в память).

person RubyJ    schedule 05.02.2019