리포트 엑셀 다운로드 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
첫째, 그 지시어가 실제 요청을 타는 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나 임시 스토리지에 올려서 다운로드 링크를 주는 방식으로 바꾸는 걸 권합니다. 당장 급하면 타임아웃부터 올리되 그건 임시방편으로 보세요.