Назад | Перейти на главную страницу

Загрузка файлов и client_max_body_size в nginx + gunicorn + django

Мне нужно настроить nginx + gunicorn, чтобы иметь возможность загружать файлы, размер которых превышает максимальный размер по умолчанию на обоих серверах.

Мой файл nginx .conf выглядит так:

server {
    # ...

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect   off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme  $scheme;
        proxy_connect_timeout 60;
        proxy_pass http://localhost:8000/;
    }
}

Идея состоит в том, чтобы разрешить запросы 20M для двух местоположений:

Я пытался добавить location директивы на том же уровне, что и тот, который я вставил здесь (с ошибкой 404), а также попытался добавить их внутри location / директива (получение 413 Entity Too Large ошибки).

Мои директивы местоположения выглядят так в своей простейшей форме:

location /admin/path/to/upload/ {
    client_max_body_size 20M;
}
location /installer/other/path/to/upload/ {
    client_max_body_size 20M;
}

Но они не работают (на самом деле я тестировал множество комбинаций и отчаянно думаю об этом.

Пожалуйста, помогите Если можете: Какие настройки мне нужно установить, чтобы это работало?

Спасибо вам большое!

Это, наконец, сработало, сделав что-то вроде этого:

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect   off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme  $scheme;
    proxy_set_header X-Forwarded-Protocol ssl;
    proxy_connect_timeout 120;
    proxy_pass http://localhost:8000/;

    location /admin/path/to/upload {
        client_max_body_size 50m;
        proxy_pass http://localhost:8000/admin/path/to/upload;
    }
}

Похоже, это почти работало, когда у вас client_max_body_size в некорневых расположениях. Вы также установили dav_methods PUT; в вашей конфигурации nginx для включения запросов PUT и DELETE?