Ошибка 400 «Request Header Or Cookie Too Large» при подключении к брокеру через Kerberos
Проблема
При аутентификации с использованием Kerberos клиент передаёт серверу список идентификаторов групп, в которые входит пользователь. В случае, если пользователь состоит в большом количестве групп, объём передаваемых данных может превысить допустимый размер буфера заголовков (headers) в Nginx.
Причина
В контейнере termit-nginx-1 в файле /etc/nginx/nginx.conf в секции http не задано значение буфера заголовков. По умолчанию используется значение 8k, которого может быть недостаточно.
Решение
Для решения проблемы:
-
Подберите подходящее значение буфера.
-
Примените подобранное значение буфера для использования в системе до обновления брокера.
- Этап 1. Подбор значения буфера
-
Используется для определения подходящего значения в вашем окружении.
-
Откройте файл
nginx.confиз контейнера в текстовом редакторе с помощью команды:sudo docker exec -it termit-nginx-1 vi /etc/nginx/nginx.conf -
В секции
httpдобавьте параметр:large_client_header_buffers 4 16k -
Сохраните все изменения.
-
Проверьте подключение:
-
если ошибка 400 «Request Header Or Cookie Too Large» при подключении к брокеру через Kerberos больше не возникает – значение буфера подходит;
-
если ошибка сохраняется – увеличьте значение (например, 32k) и повторите проверку.
-
-
Изменение, выполненное в рамках этапа 1, действует до перезагрузки контейнера (брокера) и используется только для определения подходящего значения.
- Этап 2. Применение значения буфера до обновления брокера
-
После того как подходящее значение определено, его необходимо применить так, чтобы оно сохранялось при перезапусках брокера. Для этого:
-
Создайте директорию
/etc/termit-nginx-conf/с помощью команды:sudo mkdir /etc/termit-nginx-conf/ -
Скопируйте текущий конфигурационный файл
nginx.confв новую папку:sudo docker cp termit-nginx-1:/etc/nginx/nginx.conf /etc/termit-nginx-conf/ -
Откройте файл
/etc/termit-nginx-conf/nginx.confдля редактирования и в секцииhttpдобавьте строкуlarge_client_header_buffers 4 16k;, указав значение буфера, подобранное на этапе 1:sudo vim /etc/termit-nginx-conf/nginx.conf -
Примонтируйте конфигурацию в контейнер, добавив в файл
/etc/docker/compose/termit/docker-compose.ymlв разделеservices - nginx - volumesстроку:/etc/termit-nginx-conf/nginx.conf:/etc/nginx/nginx.conf:ro -
Перезапустите сервис:
sudo systemctl restart docker-compose@termit.serviceЗначение сохраняется при перезапусках брокера, но будет перезаписано при его обновлении.
-