Development/Daily Error

NGINX 대용량 파일 업로드 502 응답

📝 작성 : 2022.06.15  ⏱ 수정 : 
반응형

Intro

대용량의 파일 업로드를 시도 할 때, 특정 용량을 넘어가면 업로드가 되지 않고 502 응답이 오는 문제가 있었습니다. 로컬 개발환경에서는 아무 문제 없지만 운영 및 개발 서버에서 문제가 재현 되었습니다.

pic

300MB 업로드 요청시 응답 시간 정보

일단 20MB, 100MB, 300MB, 1000MB 크기의 더미 파일을 각각 준비 해두고

더미 파일 생성 방법은 아래의 링크를 참고 해 주세요

Linux) 대용량의 더미 파일 생성하기

업로드 테스트를 진행 해 본 결과 300MB 까지는 문제 없이 업로드가 되었으나, 1000MB 파일을 업로드 하려고 하면 자꾸 NginX에서 502 응답을 보내고 있었습니다.

원인

저의 경우에 Nginx 설정 값이 원인 이었습니다. nginx.conf 파일을 확인 해 보면..

제일 처음 확인 해야 할 건 client_max_body_size 설정인데, 이건 20G 로 넉넉하게 설정 되어 있었습니다.

proxy_read_timeoutproxy_send_timeout도 체크를 해야 하는데, 이것도 5m 으로 제법 넉넉하게 설정 되어 있어서 문제가 되지 않았습니다.

이어서 send_timeout 도 확인이 필요한데 300 으로 아주 넉넉한 건 아니지만 그래도 1GB 업로드는 가능 할 정도로 셋팅 되어 있었습니다.

마지막으로 keepalive_timeout 를 확인 해 보니 65로 확실히 빠듯하게 설정 되어 있었습니다.

해결

nginx.confg 파일에서 http 블럭 안에 keepalive_timeout 설정을 변경 해 줍니다.

http{
...
  keepalive_timeout 3000;
...
}

이후 업로드를 테스트 해 보니 NginX가 인내심을 가지고 충분히 기다려 주는 덕에 훨씬 큰 용량의 파일을 업로드 할 수 있었습니다.

마치며

다만 이렇게 큰 용량의 파일을 하나의 요청으로 보내는 건 확실히 어려움이 많기 때문에 파일을 잘게 쪼개어 업로드를 진행 하거나 WAS 외에 파일 업로드 관련 처리만 따로 해주는 서버를 따로 두는 것이 좋을 거라 생각 됩니다.

이상입니다.

ref: https://serverfault.com/questions/597243/nginx-502-bad-gateway-when-uploading-files

반응형