Ошибка 400 Bad Request Nginx встречается достаточно редко. Она означает, что запрос к серверу был сформирован неверно, и поэтому отклонен. Это может быть вызвано разными причинами. Например, один из HTTP заголовков был изменен, а поля контрольных сумм не исправлены и так далее.
В этой статье мы рассмотрим частный случай данной ошибки — Request header or cookie too large Nginx. Разберем что является причиной этой ошибки, почему она может возникать и как ее исправить.
Что означает Request header or cookie too large Nginx
Ошибка Request header or cookie too large означает, что запрос, который был передан веб-серверу имеет слишком большой размер. Запрос принято разделять на две части: заголовок — где находится общая информация, и тело запроса. Обычно тело запроса должно быть великим и его большой размер не вызывает никаких проблем. Тогда как заголовок обычно не большой и если браузер чего-то намудрит и передаст слишком много данных, то вы получите такую ошибку.
Есть два варианта решения проблемы:
- Исправить код сайта — естественно, что браузер не будет сам выдавать вам такие запросы. Они — результат ошибки в коде сайта, а значит исправив код — вы решите проблему;
- Увеличить максимальный размер заголовка — если же вы уверены, что заголовок должен быть большим и это нормально для вашего сайта, то, возможно, стоит увеличить лимиты на размер заголовка в Nginx;
- Если вы пользователь, то ждать пока ошибку исправит администратор ресурса.
Как исправить Request header or cookie too large Nginx
За максимальный размер передаваемого пакета отвечают три параметра, которые нужно разместить в секции http:
- client_body_buffer_size — размер буфера для тела запроса;
- client_header_buffer_size — размер буфера для заголовка;
- large_client_header_buffers — максимальное количество и размер буфера для чтения большого заголовка.
Больше всего нас интересует последняя строка. Первым парамтером передается количество буферов, а вторым размер каждого из них. Если размер заголовка превысит размер одного буфера, то пользователь получит ошибку 414. По умолчанию размер одного буфера равняется 8 килобайт. Делаем размер буфера для обычных запросов равным 8 килобайт:
Затем создаем восемь буферов с размером 64 килобайта для хранения больших заголовков. Буферы выделяются по мере надобности, так что за потребление памяти можно особо не опасаться:
Эти строки нужно добавить в секцию http перед всеми секциями server. Дальше можете перезагрузить Nginx:
nginx -s reload
И проверить воспроизводится ли ошибка. Если все было сделано правильно, то ошибки больше быть не должно.