← 전체 글로 돌아가기

서버 운영

Nginx 502가 뜰 때 확인하는 순서

Nginx 502 Bad Gateway는 nginx 자체가 아니라 업스트림 앱 서버가 응답을 못 하는 상황이다. 어디서 끊겼는지 빠르게 좁히는 법을 정리했다.

502 Bad Gateway는 nginx가 살아 있고 백엔드 업스트림이 응답을 못 하는 상황이다. nginx 설정 문제가 아니라 그 뒤에 있는 앱 서버 문제라는 뜻이니 앱부터 확인한다.

nginx 에러 로그 먼저

sudo tail -n 50 /var/log/nginx/error.log

connect() failed (111: Connection refused) 메시지가 있으면 upstream 포트에 아무것도 떠 있지 않은 것이다. upstream timed out이면 앱이 뜨긴 했는데 응답이 너무 느린 것이다. 에러 메시지가 어느 케이스인지에 따라 다음 확인 방향이 갈린다.

업스트림 상태 확인

nginx 설정의 proxy_pass가 가리키는 포트가 실제로 열려 있는지 확인한다.

sudo ss -lntp | grep :3000
curl -I http://localhost:3000

포트가 없으면 앱 프로세스가 죽어 있는 것이다. 앱 로그를 본다. 포트는 있는데 curl 응답이 안 오면 앱이 요청을 처리 못 하는 상태다.

nginx 설정 문법 확인

설정을 최근에 건드렸다면 문법 오류로 reload가 제대로 안 됐을 수 있다.

sudo nginx -t
sudo systemctl status nginx

에러가 있으면 설정 파일을 고치고 sudo systemctl reload nginx로 다시 로드한다.

DNS와 인증서는 별개다

502와 DNS 문제는 다르다. 502는 연결은 됐는데 업스트림이 응답 못 하는 것이고, DNS 문제는 아예 연결이 안 되는 것이다. 도메인이 맞는 IP를 가리키는지 확인하거나 인증서를 점검하는 건 502가 아닌 connection refused나 SSL 에러일 때 한다.

dig example.com +short
curl -I https://example.com

502가 간헐적이라면 백엔드가 특정 요청에서 hang이 걸리는 것이다. nginx의 proxy_read_timeout 값을 늘리거나 앱 쪽 응답 시간을 줄이는 방향으로 접근한다.