본문 바로가기
Q&A해결2026년 7월 29일1분 읽기

엑셀 내보내기 같은 오래 걸리는 API가 정확히 60초에서 504로 잘립니다

p
proxy_taemin
조회 690댓글 1

리포트 엑셀 다운로드 API가 데이터 많으면 1분 넘게 걸리는데, 딱 60초쯤 되면 nginx가 504 Gateway Time-out을 뱉습니다. 백엔드(WAS) 로그를 보면 요청은 계속 처리 중이고 나중엔 정상적으로 파일까지 다 만들거든요. 근데 클라이언트는 이미 504를 받은 뒤라 소용이 없어요.

proxy_read_timeout을 300s로 올려봤는데도 여전히 60초에서 잘립니다. nginx가 여러 단이라 어느 단에서 자르는 건지도 헷갈리고요.

upstream timed out (110: Connection timed out) while reading response header from upstream

댓글 1

김김영삼3개월 전
딱 60초에서 잘리면 어딘가 기본값 60초짜리 타임아웃이 그대로 살아있는 거예요. proxy_read_timeout을 올렸는데도 그대로면 두 가지를 의심하세요.

첫째, 그 지시어가 실제 요청을 타는 location에 안 들어갔을 수 있어요. http나 server 블록에 넣어도 상속은 되는데, 혹시 그 API만 다른 location으로 분기되거나 다른 include 파일을 타면 거기엔 안 걸려 있을 수 있습니다. nginx -T로 최종 병합된 설정을 찍어서 그 location에 값이 실제로 들어갔는지 확인하세요.

둘째, nginx가 프론트에 하나 더 있거나 앞에 클라우드 로드밸런서(ALB 같은 거)가 있으면 그쪽 idle timeout이 60초라 거기서 끊는 거예요. AWS ALB 기본 idle timeout이 딱 60초입니다. 이 경우 뒤쪽 nginx만 아무리 올려도 앞단이 먼저 끊어요. 브라우저부터 ALB, nginx, WAS까지 계층을 하나씩 벗겨가며 어디서 60초가 나오는지 봐야 합니다.

그리고 솔직히 말하면 60초 넘는 동기 다운로드는 타임아웃을 300초로 올려도 언젠가 또 터져요. 사용자 브라우저도 기다리다 지치고요. 리포트 생성을 백그라운드 잡으로 던지고, 완료되면 S3나 임시 스토리지에 올려서 다운로드 링크를 주는 방식으로 바꾸는 걸 권합니다. 당장 급하면 타임아웃부터 올리되 그건 임시방편으로 보세요.
Ctrl+Enter로 등록