기타/개발일지

nginx 499 응답 처리

반응형
반응형

nginx에서만 사용하는 499 응답이 있다.

 

이 응답은 클라이언트가 연결을 끊어버리면 nginx에서는 응답할 곳이 사라지기 때문에 발생한다.

 

프록시 재전송 스케줄러와 관련해서 해당 응답이 발생했을때 backup 서버를 호출하지 않는 이슈가 발생했다.

 

원인 : 1. WAS에서 알 수 없는 오류로 DB 풀이 가득 참

          2. 클라이언트에서 timeout 발생(connection close)

          3. nginx에서 클라이언트 연결이 끊겨서 499 발생(upstream backup 호출 안됨)

          4. WAS에서 처리되지도 않고 backup 호출이 안되서 재전송 스케줄러도 동작 X(데이터 유실)

 

해결방법 1 : proxy_next_upstream error timout http_499 non_idempotent;

결과 :  실패 -> 공식문서에서는 커스텀 응답도 upstream에 추가 가능하다고 나와있지만 http_499를 추가하면 버전(1.22.0) 때문인지 nginx에서 오류발생(다른 버전은 가능 할 수 있음)

 

해결방법 2 : proxy_ignore_client_abort on; (클라이언트와 관계 없이 WAS에 처리 요청 보내는 설정)

                    WAS 타임아웃보다 nginx 타임아웃을 짧게 설정

결과 : 성공 -> nginx에서 타임아웃 발생 시 504 응답 발생으로 backup 호출(499 응답 발생이 안되게 조치)

 

nginx 설정만으로 499 응답 처리가 되긴 했는데(생각보다 시간을 썻다..) 장기적으로 봤을때 안정성이나 사용량이 늘어난다면 kafka 같은 메시징 서비스 도입이 필요할 것 같다.

반응형

'기타 > 개발일지' 카테고리의 다른 글

[Java] 폴더 파일개수 체크 성능 이슈  (0) 2023.06.18
2021-04-08  (0) 2021.04.08
2021-03-31  (0) 2021.03.31
2021-03-29  (0) 2021.03.30