Как обрабатывать слишком большой файл cookie, из-за которого Nginx возвращает 502?
Наш сервер Nginx в настоящее время возвращает 502 для пользователя для нашего приложения на основе NodeJS, и в журналах ошибок указано:
2670 upstream sent too big header while reading response header from upstream
Это, по-видимому, вызвано слишком большим размером файла cookie (заголовок превышает 4 КБ по запросу), и мы не знаем, как справиться с этой ситуацией, кроме указания пользователю очистить свои файлы cookie для сайта. Есть предложения, как с этим бороться?
Конфигурация прокси-прохода в нашем файле nginx:
location / {
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header x-forwarded-host $host; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
}
Дальнейший тест, передавая экземпляр Nginx, показывает, что вышестоящий сервер Node.JS может обрабатывать файл размером более 4 КБ, предполагая, что проблема находится на уровне Nginx.
Наше окружение:
Сервер Node.js 10.19.0 на базе Express, обслуживаемый Nginx 1.14.0 в системе на основе Ubuntu. Приложение, работающее на сервере Node.js, использует Quasar SSR.
Ответы
Решение, на котором я закончил, заключалось в увеличении буфера для размера заголовка до 16 КБ, на основе статьи и документации Nginx :
proxy_buffers 8 16k; # Buffer pool = 8 buffers of 16k
proxy_buffer_size 16k; # 16k of buffers from pool used for headers
Процитируем конкретные тексты из документации:
На proxy_buffers
:
Синтаксис:
proxy_buffers number size;
По умолчанию:proxy_buffers 8 4k|8k;
Контекст:http, server, location
Устанавливает количество и размер буферов, используемых для чтения ответа от прокси-сервера для одного соединения. По умолчанию размер буфера равен одной странице памяти. Это либо 4K, либо 8K, в зависимости от платформы.
На proxy_buffer_size
:
Синтаксис:
proxy_buffer_size size;
По умолчанию:proxy_buffer_size 4k|8k;
Контекст:http, server, location
Устанавливает размер буфера, используемого для чтения первой части ответа, полученного от прокси-сервера. Эта часть обычно содержит небольшой заголовок ответа. По умолчанию размер буфера равен одной странице памяти. Это либо 4K, либо 8K, в зависимости от платформы. Однако его можно сделать меньше.