본문 바로가기

업무/정리 & 오류

[오류] 504 Gateway Timeout (Nginx 프록시 모듈)

 

백엔드에서 여러 로직이 비동기로 진행되는 동안

프론트에서는 로딩창을 띄운채로 대기하다가

응답을 받으면 완료 alert를 띄운다.

 

그런데 백엔드에서 로직이 진행되는 도중 갑자기 클라이언트에서 504에러를 띄운다.

그와중에 백엔드 로직은 진행되고 문제없이 마무리됨.

로컬에서는 문제없었는데 배포버전에서만 오류 발생.

 

현재 배포환경은 프론트/백엔드 각 컨테이너가 nginx 프록시 서버를 통해 연결된다.

nginx의 timeout 기본설정은 60초이고, 이 시간이 지나면 Timeout 오류를 반환한다고 한다.

nginx 설정파일에 아래 두개의 timeout 설정 추가해줬다.

proxy_connect_timeout 120s;  
proxy_read_timeout 120s;

해결완료!


근데 응답을 받기까지 1분 41초 정도 걸려서 아슬아슬하다 
응답먼저 내보내고 뒤에서 비동기로 처리해야 할지 ?

 


 

[ Nginx_Timeout 설정 ]

 

1. proxy_connect_timeout

Nginx가 프록시 서버와 연결을 설정하는데 사용하는 최대 시간.

proxy_connect_timeout 60s;

=> 클라이언트 요청에 대해 Nginx가 백엔드 서버에 연결을 시도하는 최대 시간으로,
 연결이 되지 않으면 504 Gateway Timeout 오류.

 

2. proxy_send_timeout

Nginx가 클라이언트의 요청을 백엔드 서버로 전송하는 데 사용하는 최대 시간.

proxy_send_timeout 60s;

=> 클라이언트 요청 데이터를 Nginx가 백엔드 서버로 전달하는 데 걸리는 제한 시간으로,
대량의 데이터를 업로드하는 경우 필요.

 

3. proxy_read_timeout

Nginx가 백엔드 서버로부터 응답 데이터를 읽는 데 사용하는 최대 시간.

proxy_read_timeout 60s;

=> 백엔드 서버가 요청을 처리하고 응답을 생성하기까지의 제한 시간으로,
시간내에 응답을 받지 못하면 Nginx가 연결을 종료.

 

4. send_timeout

Nginx가 클라이언트에게 데이터를 보내는 동안 대기하는 최대 시간.

send_timeout 60s;

=> Nginx가 응답 데이터를 클라이언트로 전송하는 과정에서 
클라이언트가 데이터를 받지 못하거나 읽기를 멈추면 연결을 종료.
(불안정하거나 느린 네트워크 환경)

 


 

https://ilikezzi.tistory.com/60

 

[Error] 504 Gateway Timeout Error 해결: Nginx와 로드밸런서 타임아웃

얼마 전 회사 프론트직원분께서 staging admin에서 504에러가 뜬다고 찾으셨다. 그래서 바로 staging Swagger에서 관련 API를 날려보니 다음과 같이 나왔다. 확인해보니 504 Time-out 에러가 나왔다. 이제 차

ilikezzi.tistory.com

 

https://12bme.tistory.com/367

 

[Nginx] 엔진엑스 프록시 모듈

엔진엑스 기본 빌드에는 프록시 모듈이 포함돼 있어 클라이언트로부터의 HTTP 요청을 백엔드 서버에 전달합니다. 여러 관점에서 모듈환경을 설정해봅시다. - 백엔드 서버의 기본 주소와 포트 정

12bme.tistory.com