Intro
대용량의 파일 업로드를 시도 할 때, 특정 용량을 넘어가면 업로드가 되지 않고 502 응답이 오는 문제가 있었습니다. 로컬 개발환경에서는 아무 문제 없지만 운영 및 개발 서버에서 문제가 재현 되었습니다.
300MB 업로드 요청시 응답 시간 정보
일단 20MB, 100MB, 300MB, 1000MB 크기의 더미 파일을 각각 준비 해두고
더미 파일 생성 방법은 아래의 링크를 참고 해 주세요
업로드 테스트를 진행 해 본 결과 300MB 까지는 문제 없이 업로드가 되었으나, 1000MB 파일을 업로드 하려고 하면 자꾸 NginX에서 502 응답을 보내고 있었습니다.
원인
저의 경우에 Nginx 설정 값이 원인 이었습니다. nginx.conf 파일을 확인 해 보면..
제일 처음 확인 해야 할 건 client_max_body_size
설정인데, 이건 20G
로 넉넉하게 설정 되어 있었습니다.
proxy_read_timeout
와 proxy_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
'Development > Daily Error' 카테고리의 다른 글
OAuth2 Redirect 주소 문제 해결 (0) | 2022.06.20 |
---|---|
The getKey method should only be used when a single key is returned (0) | 2022.06.16 |
Spring Boot2.6에서 Springfox3 실행 실패 에러 (0) | 2022.05.08 |
IntelliJ IDEA에서 Lombok 패키지를 못 찾을 때 (0) | 2022.04.27 |
Spring Boot 단독실행시 no main manifest attribute 에러 해결 (0) | 2022.04.26 |