너무 큰 쿠키를 처리하여 Nginx가 502를 반환하는 방법은 무엇입니까?
Nginx 서버는 현재 NodeJS 기반 애플리케이션에 대해 사용자에 대해 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을 사용하고 있습니다.
답변
내가 끝낸 해결책은 기사 와 Nginx 문서를 기반으로 헤더 크기의 버퍼를 16K로 늘리는 것입니다 .
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입니다. 그러나 더 작게 만들 수 있습니다.