Ошибка 400 bad request nginx означает, что сделан неверный запрос.
Ошибка может возникать по разным причинам, всё зависит от используемой конфигурации и приложения.
Если речь идет о запросах к базе данных или API — причина может быть в работе бэкенда. Например, недостаточное количество знаков в поле БД.
В случае если ошибка возникает при обращении к странице сайта — причина обычно в Nginx и размерах буферов, которые задаются в конфигурационных файлах.
Рассмотрим подробнее этот случай, он самый типичный.
Ошибка 400 bad request nginx
Объем заголовков в запросе может быть различным. Если он велик и лимит, установленный в конфигурации, не позволяет их обработать — возникнет ошибка.
Ошибка исправляется добавлением в секцию http конфигурационного файла nginx.conf следующей директивы:
large_client_header_buffers 2 12k;
Тестируем конфигурацию, убеждаемся в том, что ошибок в выводе нет
nginx -t
Затем перечитываем конфигурация веб-сервера чтобы он увидел новые директивы и значения паратетров.
nginx -s reload
Если параметры уже добавлены можно попробовать увеличить их значения, в 2, в 4 раза.
С каждой итерацией нужно тестировать конфигурацию с помощью nginx -t, перезапускать процесс nginx -s reload и проверять выполняя тот же запрос при котором была ошибка 400 bad request nginx.
Дополнительно можно проверить логи Nginx
less /var/log/nginx/error.log
Если ошибка возникает периодически — в логе доступа можно найти при помощи grep все случаи получения ответа 400 по уникальным характеристикам запроса: комбинации даты, времени, ip адреса клиента. Затем сопоставить данные с записями в error.log — логе ошибок.
В access.log будут запросы, которые выполнялись при обращении к сайту.
Пример запроса с кодом ответа 400 приведен на скриншоте:
Также есть другие буферы Nginx, на которые стоит обратить внимание (ссылка на статью про буферы была выше). Особенно если сервер обслуживает нагруженный проект.
Читайте про конфигурацию веб-сервера Nginx: структуру файлов с настройками и контексты.