nginx에서 내부 ALB로 proxy_pass 하면 며칠 뒤부터 504가 납니다
조회 1 · 댓글 0
Ubuntu 22.04 EC2에서 nginx 1.18.0(apt 기본 패키지)을 앞단에 두고 있습니다. 뒤쪽 API 서버들은 internal ALB 뒤에 있고, nginx에서는 ALB의 DNS 이름으로 바로 proxy_pass 하고 있습니다.
location /api/ {
proxy_pass http://internal-api-alb-123456789.ap-northeast-2.elb.amazonaws.com;
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_set_header Host $host;
}nginx를 재시작하고 나서 며칠 동안은 문제가 없습니다. 그런데 어느 시점부터 /api/ 요청 일부가 504로 떨어지기 시작하고, 에러 로그에는 아래 내용이 계속 쌓입니다.
2026/09/21 03:14:52 [error] 1123#1123: *884211 upstream timed out (110: Connection timed out) while connecting to upstream, client: 10.0.1.25, server: example.internal, request: "GET /api/v1/orders HTTP/1.1", upstream: "http://10.0.12.87:80/api/v1/orders", host: "example.internal"
로그에 찍힌 10.0.12.87을 확인해 보니 지금 ALB 이름을 조회하면 나오는 IP 목록에는 없습니다.
$ dig +short internal-api-alb-123456789.ap-northeast-2.elb.amazonaws.com 10.0.11.42 10.0.13.105
같은 서버에서 curl로 ALB DNS 이름을 직접 호출하면 정상 응답이 오고, sudo systemctl restart nginx를 하면 504가 바로 사라집니다. 지금은 증상이 보이면 재시작하는 식으로 버티고 있습니다.
지금까지 해본 것은 proxy_connect_timeout을 5초에서 15초로 늘려본 것과 ALB 대상 그룹 헬스체크 확인입니다. 타임아웃을 늘리니 504까지 걸리는 시간만 길어졌고, 대상 그룹은 모두 healthy 상태였습니다. /etc/resolv.conf는 VPC 기본 리졸버(127.0.0.53 stub)를 쓰고 있습니다.
OS는 이미 바뀐 IP를 알고 있는데 nginx만 예전 IP로 계속 붙으려는 이유가 무엇인지 궁금합니다. 그리고 재시작 없이 nginx가 바뀐 ALB IP를 따라가게 하려면 설정을 어떻게 잡아야 하는지 조언 부탁드립니다.
로그인 후 답글을 남길 수 있습니다.