Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Ошибка 400 «Request Header Or Cookie Too Large» при подключении к брокеру через Kerberos

Для версии 2.4

Проблема

При аутентификации с использованием Kerberos клиент передаёт серверу список идентификаторов групп, в которые входит пользователь. В случае, если пользователь состоит в большом количестве групп, объём передаваемых данных может превысить допустимый размер буфера заголовков (headers) в Nginx.

Причина

В контейнере termit-nginx-1 в файле /etc/nginx/nginx.conf в секции http не задано значение буфера заголовков. По умолчанию используется значение 8k, которого может быть недостаточно.

Решение

Для решения проблемы:

  1. Подберите подходящее значение буфера.

  2. Примените подобранное значение буфера для использования в системе до обновления брокера.

    Этап 1. Подбор значения буфера

    Используется для определения подходящего значения в вашем окружении.

    1. Откройте файл nginx.conf из контейнера в текстовом редакторе с помощью команды:

      sudo docker exec -it termit-nginx-1 vi /etc/nginx/nginx.conf
    2. В секции http добавьте параметр:

      large_client_header_buffers 4 16k
    3. Сохраните все изменения.

    4. Проверьте подключение:

      • если ошибка 400 «Request Header Or Cookie Too Large» при подключении к брокеру через Kerberos больше не возникает – значение буфера подходит;

      • если ошибка сохраняется – увеличьте значение (например, 32k) и повторите проверку.

Изменение, выполненное в рамках этапа 1, действует до перезагрузки контейнера (брокера) и используется только для определения подходящего значения.

Этап 2. Применение значения буфера до обновления брокера

После того как подходящее значение определено, его необходимо применить так, чтобы оно сохранялось при перезапусках брокера. Для этого:

  1. Создайте директорию /etc/termit-nginx-conf/ с помощью команды:

    sudo mkdir /etc/termit-nginx-conf/
  2. Скопируйте текущий конфигурационный файл nginx.conf в новую папку:

    sudo docker cp termit-nginx-1:/etc/nginx/nginx.conf /etc/termit-nginx-conf/
  3. Откройте файл /etc/termit-nginx-conf/nginx.conf для редактирования и в секции http добавьте строку large_client_header_buffers 4 16k;, указав значение буфера, подобранное на этапе 1:

    sudo vim /etc/termit-nginx-conf/nginx.conf
  4. Примонтируйте конфигурацию в контейнер, добавив в файл /etc/docker/compose/termit/docker-compose.yml в разделе services - nginx - volumes строку:

    /etc/termit-nginx-conf/nginx.conf:/etc/nginx/nginx.conf:ro
  5. Перезапустите сервис:

    sudo systemctl restart docker-compose@termit.service

    Значение сохраняется при перезапусках брокера, но будет перезаписано при его обновлении.