본문 바로가기

Proj/Tripot

Trouble Shooting - nginx 용량 늘리기(feat. 스토리 등록 오류)

1. 개요

 Tripot 프로젝트를 운영하던 중 스토리가 정상적으로 등록되지 않는 오류가 발생했다. 이를 해결하는 과정을 기술하고자 한다.

2. 증상

세부적인 증상은 다음과 같다.

  • 사진을 등록하는 경우 오류 발생
  • 개발서버에는 없는 증상, 운영서버에서 스토리를 등록하는 경우에만 발생
  • 서버에서 INVALID_TOKEN 예외 발생

이를 기반으로 우선 프론트 측에서 토큰이 정상적으로 오지 않을것이라는 생각을 1차적으로 하여 요청 및 응답을 받았다. 다음은 이의 일부이다.

<head><title>413 Request Entity Too Large</title></head>
<body>
<center><h1>413 Request Entity Too Large</h1></center>
<hr><center>nginx/1.27.3</center>
</body>


...


 "status": 413, ...

 

3. 원인 및 해결 

현재 스토리 작성 로직은 다음과 같이 이루어진다.

  1. 사용자가 스토리를 작성한다. 작성중이고, 확정되지 않았으므로 스토리의 사진은 작성 버튼을 누르기 전까지 s3에 저장하지 않는다.
  2. 작성 완료 후 작성 버튼을 누르면, 사진에 대해서는 s3에 저장하는 api를 서버에 요청하고, 해당 주소를 받아온다.
  3. 사진의 s3 주소와 게시글 제목, 내용 등의 정보를 서버에 보내 db에 저장한다.

 해당 오류는 nginx로부터 용량 초과라는 응답을 받았다. 즉, 서버로 요청이 오기 이전에 발생한 것이다. 현재 nginx는 운영 서버에서만 무중단 배포 라우팅할 때 사용하므로 운영 서버에서만 오류가 발생하게 된 것이다.

 

 nginx 공식 문서의 일부이다. body 크기는 따로 지정하지 않으면 1MB가 최대이다. 서버는 장당 최대 5MB를 수용할 수 있으니 일종의 병목으로 인한 오류가 발생한 것이다.

 

 

 위와 같이 /nginx/conf.d/default.conf에 용량을 지정하여 문제를 해결할 수 있었다.

 

4. 참고자료

https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

 

Module ngx_http_core_module

Module ngx_http_core_module Directives Syntax: absolute_redirect on | off; Default: absolute_redirect on; Context: http, server, location This directive appeared in version 1.11.8. If disabled, redirects issued by nginx will be relative. See also server_na

nginx.org