관련지식
nginx, querystring
URL을 호출하면서 QueryString으로 큰 사이즈의 파라미터를 넘길때 발생합니다. 파일 업로드와 같은 대용량 전송은 대부분 request body
를 이용하기 때문에 이 에러가 발생하지 않겠지만, 텍스트를 get
방식으로 전달해야 하는 경우에 발생할 수 있습니다. 대량의 텍스트 전달 또한 post
로 전송하는게 맞지만 어떤 경우엔 반드시 get
으로 보내야 할수도 있겠죠. 이때는 large_client_header_buffers
또는 client_header_buffer_size
설정을 변경하면 됩니다.
비슷해 보이는 속성이지만 두개의 설정은 의미가 좀 다릅니다. client_header_buffer_size
는 일반적으로 요청되는 request
에 대한 버퍼크기를 지정하는 것이고 large_client_header_buffers
는 보통의 header 사이즈를 넘는 요청에 대해 처리할 버퍼 크기를 지정하는 것입니다.
잠깐 예를 들어보겠습니다. 설정을 건드리지 않는다면 공식 가이드에 있는것처럼 아래와 같이 설정되어 있습니다.
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
이것은 일반적인 요청의 헤더는 1kb 버퍼로 처리하고 그것보다 큰 요청은 8k 버퍼로 처리한다는 의미 입니다. 8kb 앞에 적힌 숫자 4는 8kb 버퍼를 4개 만든다는 뜻입니다. 큰 요청은 동시에 최대 4개까지 처리할수 있다는 뜻이 되겠죠. 만약 QueryString에 2kb 텍스트를 파라미터로 전달한다면 large_client_header_buffers
버퍼를 사용하여 처리하게 될 것입니다. 요청 헤더가 8kb를 넘으면 414 오류가 발생하구요.
만약 아래와 같이 client_header_buffer_size
만 버퍼 크기를 늘려도 414 에러를 처리할수 있습니다. 하지만 대부분의 요청은 64k가 아닐텐데 과하게 버퍼를 늘린것이므로 서버 자원을 낭비하게 되겠죠.
client_header_buffer_size 64k;
따라서 특수한 경우가 아니라면 아래처럼 large_client_header_buffers
설정만 수정하는게 맞습니다.
large_client_header_buffers 4 64k;
http와 server 에 설정이 가능하므로 site-available 의 환경설정에 추가하시면 됩니다.
'nginx' 카테고리의 다른 글
[nginx] Upstream prematurely closed connection while reading upstream (1) | 2020.02.14 |
---|---|
[nginx] Remote Desktop Protocol 을 위한 nginx 설정법 (0) | 2019.11.15 |
[nginx] location 테스트 페이지 (0) | 2019.10.07 |
[nginx] 특정 referer 에서만 url 호출 가능하도록 설정하기 (0) | 2019.10.02 |
[nginx] websocket 사용 설정 (0) | 2019.09.24 |