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 |