Nginx가 502를 반환하게 만드는 너무 큰 쿠키를 처리하는 방법은 무엇입니까?

Nginx가 502를 반환하게 만드는 너무 큰 쿠키를 처리하는 방법은 무엇입니까?

NodeJS 기반 애플리케이션의 경우 Nginx 서버는 현재 사용자에게 502를 반환하고 있으며 오류 로그에는 다음이 표시됩니다.

2670 upstream sent too big header while reading response header from upstream

이는 쿠키가 너무 커서(요청당 헤더가 4K를 초과함) 발생하는 것으로 보이며 사용자에게 사이트 쿠키를 삭제하라고 지시하는 것 외에는 이 상황을 처리하는 방법을 잘 모르겠습니다. 이 문제를 해결하는 방법에 대한 제안 사항이 있습니까?

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 서버가 4KB보다 큰 파일을 처리할 수 있는 것으로 나타났습니다. 이는 문제가 Nginx 수준에 있음을 나타냅니다.

우리 주변 환경:

Ubuntu 기반 시스템의 Nginx 1.14.0이 앞에 있는 Express 기반 Node.js 10.19.0 서버. Node.js 서버에서 실행되는 애플리케이션은 Quasar SSR을 사용합니다.

답변1

내가 내린 해결책은 헤더 크기 버퍼를 16K로 늘리는 것이었습니다.기사그리고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입니다. 그러나 더 작게 만들 수 있습니다.

관련 정보