오늘 마주친 문제는 Nginx에서 reverse proxy를 설정해 application server를 연결했을 때, POST 요청을 보내면 500 에러가 발생하는 현상입니다. 요청에 따라 정상적으로 실행되기도 합니다. Nginx를 사용해 많은 개발 작업을 해봤던 분들이라면 한 번쯤 겪었을 듯 한 문제가 아닐까 하는 생각이 듭니다.
문제의 원인은 client_body_buffer_size 보다 큰 값이 post의 body로 전달됐기 때문입니다. 기본 값이 32bit에서는 8K, 64bit에서는 16K인데, 문제를 발생시켰던 요청의 body는 24K가 넘었습니다. 요청 중에 body의 크기가 7K 정도였던 것은 정상적으로 실행된 이유도 함께 알 수 있습니다.
client_body_buffer_size를 50K로 변경한 후 다시 시도하니 정상적으로 요청을 처리할 수 있었습니다.
이 방법 외에도 테스트해보지는 않았지만 client_body_temp_path 를 설정해도 문제를 해결할 수 있을 것으로 보입니다. (테스트는 해보지 않았습니다.) 이 값을 설정하면 요청의 body를 임시로 해당 위치에 저장하게 됩니다.
참고: http://shim0mura.hatenadiary.jp/entry/20120701/1341162337
반응형