- [트러블 슈팅] Nginx 502 Bad Gateway 에러 발생2025년 04월 29일 10시 11분 02초에 업로드 된 글입니다.작성자: do_hyuk728x90반응형
문제상황
개발 서버에서 새로운 기능들을 구현한 뒤 배포 서버에 적용하는 과정에서 문제가 발생했는지 서비스가 502 Bad Gateway 에러를 뱉어내고 있었다.
혹시나 GitActions 가 실패했는지 다시 확인해 보았지만 문제는 없었다.
CI/CD 가 제대로 적용되어 docker에 제대로 올라갔는지 확인해 보기 위해 docker ps를 통해 확인해 보았지만 정상적으로 포트가 열려있었다.
NAME STATUS PORTS ori-api-server Up 49 minutes 8080 open ori-frontend Up About an hour 3000 open ori-nginx Up 4 months 80 open ori-redis Up 6 months 6379 open Nginx에 문제가 있나 확인하기 위해 로그를 확인해봤다.
172.xx.x.xxx - - [28/Apr/2025:16:22:23 +0000] "GET / HTTP/1.1" 502 157 "-" "ELB-HealthChecker/2.0" 2025/04/28 16:22:31 [error] 21#21: *1810534 connect() failed (111: Connection refused) while connecting to upstream, client: 172.xx.xx.xxx, server: , request: "GET / HTTP/1.1", upstream: "http://172.x.x.4:3000/", host: "172.xx.xx.xxx"
로그 내용을 정리하자면 502 Bad Gateway 에러가 발생하고 있고,
Nginx가 "http://172.xx.x.4:3000"으로 요청을 프록시하려고 하는데, 172.xx.x.4:3000 포트에 서버가 안떠있는 것 같다.
(connect() failed (111: Connection refused))
원인으로 생각한 것이 두가지 있는데
첫 번째는 3000포트가 열리지 않았을 때, 두 번째는 컨테이너 IP가 달라졌을 때 라고 판단하였다.
3000 포트는 이미 docker ps를 통해 열려있는 것을 확인했기 때문에 컨테이너 IP를 확인해보겠다.
ori-frontend 컨테이너 IP 확인 결과를 보면 모자이크 처리 되어있지만 172.xx.x.2 IP를 사용하고 있다.
이게 문제인 것이다. 지금 Nginx는 172.xx.x.4:3000로 proxy_pass를 시도하고 있기 때문에 서버에 연결할 수 없는 것이다.
이번에 프론트 코드를 수정하면서 ori-frontend 컨테이너가 재시작 되었기 때문에 이때 컨테이너 IP가 바뀌었지만 docker 내부 DNS 캐시가 꼬였거나 nginx가 컨테이너 이름이 아닌 예전 IP를 기억하고 있어서 발생할 수 있기 때문에 nginx를 재시작해보고 같은 문제가 발생한다면 설정 파일을 확인해봐야겠다.
docker restart ori-nginx
nginx restart 이 후 로그 재시작 후 HealthCheck가 성공하게 된 것을 볼 수 있다.
해결
728x90반응형'포트폴리오 > AutoReview' 카테고리의 다른 글
Code Post에 북마크 기능 추가 (0) 2025.05.10 게시글 공개 여부 기능 추가 (0) 2025.05.08 검색 쿼리 개선 (LIKE -> Full Text Search) (0) 2025.04.23 [트러블 슈팅] 개발 서버와 배포 서버 사이에 DB 불일치 해결 (0) 2025.03.31 Join 연산 무조건 피해야 하나? (0) 2025.03.24 댓글