Как проверить размер загружаемого файла в Nginx?

Как увеличить допустимы размер я знаю:

/etc/nginx/nginx.conf

http {
    #...
        client_max_body_size 30m;
    #...
}

А вот как сделать редирект самим Nginx на страницу при больших отправленных данных - не знаю.

Теоретически предполагаю, что на Flask можно прописать:

@app.errorhandler(413)
def not_found_error(error):
    return render_template('413.html'), 413

Но это тогда получается, что если несколько приложений развернуто - то надо каждому прописывать, а вот как сделать, чтобы Nginx не пускал на приложения уже такой объем данных или этого нельзя сделать?



Дополнение:

Почитал руководство, которое посоветовал @andreymal. Плюс нашел еще мануал

Залил файл 413.html в каталог:

/usr/share/nginx/html

Зашел в настройки файла:

/etc/nginx/nginx.conf

Внес изменения в конце (это последняя запись):

http{
...
server {
     error_page 413 /413.html;
     location = /413.html {
                            root /usr/share/nginx/html;
                            internal;
                           }
       }
}

В итоге эта ошибка не отрабатывает. Но, если сделать эти изменения в настройках приложения APP (APP.servise), то тогда страница ошибки откроется...

Но это не камельфо, т.к. получается что надо будет для каждого приложения прописывать такие настройки (либо с таким же успехом можно прописать эти ошибки в самих приложениях)...

Что не так? Может, где-то идет переопределение моих настроек?


Ответы (1 шт):

Автор решения: Алексей Белкин

Выражаю благодарность @andreymal в помощи решения этого вопроса.

Оставлю решение, если кто тоже столкнётся в будущем.

1. Создается НТML-файлы с ошибками.

2. Заливаются на сервер (я залил через scp):

scp URL_LOCAL_FILE SSH_USER@IP_SERVER:URL_SERV_DIR

URL_LOCAL_FILE - расположение файла локально URL_SERV_DIR - расположение папки на сервере (Абсолютный путь).

Абсолютный путь можно узнать через команду:

echo $PWD

3. Создается папка с пользовательскими настройками. Я создал в:

/etc/nginx/snippets 4. Создается файл с ошибками, например: NAME_FILE:

sudo nano NAME_FILE.conf

5. Там прописываем настройки (примеры других настроек):

error_page 413 /413.html;

location = /413.html {
                      root /usr/share/nginx/html;
                      internal;
                     }

6. Добавляем в блок server конфига приложения:

sudo nano /etc/nginx/sites-enabled/APP_CONF

server {
...
include /etc/nginx/snippets/NAME_FILE.conf
}

Пункт №6 - применяется для всех конфигов приложений на сервере, если хотите, чтобы страница ошибки была одинаковая на всех приложениях.

  1. Чтобы применились настройки - надо не забыть перезагрузить nginx:
sudo systemctl restart nginx
→ Ссылка