502 에러
502 에러(502 Bad Gateway)는 앞에서 요청을 받는 서버(nginx 같은 게이트웨이)가 뒤쪽 앱에게서 제대로 된 답을 못 받았다는 응답이에요. 직접 실습해 보니 앱만 꺼져 있으면 0.002초 만에 502, 앱이 늦으면 3초 뒤 504 가 났어요.
목차 보기
502 에러(502 Bad Gateway)는 앞에서 요청을 받는 서버(게이트웨이)가 내는 응답이에요. 뒤쪽 앱에게서 제대로 된 답을 못 받았다는 뜻이에요. 콜센터 상담원(nginx)이 담당 부서(앱)에 전화를 돌렸는데 아무도 안 받는 상황이에요. 상담원은 멀쩡하니 전화는 받지만 "지금 연결이 안 돼요"라고 답해요.
한눈에 보기
502 에러는 왜 생겨요?
| 원인 | 흔한 상황 |
|---|---|
| 앱이 꺼져 있음 | 배포 중 재시작, 앱이 오류로 죽음, 서버 재부팅 뒤 앱이 자동으로 안 뜸 |
| 주소·포트가 안 맞음 | nginx 는 3000 번을 보는데 앱은 8080 번에서 떠 있음 |
| 앱이 답 도중 죽음 | 메모리가 모자라 처리 중에 앱이 꺼짐 |
| 앞 서버와 앱 사이 설정 | HTTPS·소켓 경로·방화벽 설정이 서로 다름 |
직접 502 를 만들어 봤어요
2026년 10월 29일, 우리 PC 의 도커에 nginx 와 뒤쪽 앱(Node.js, PHP-FPM)을 띄우고 일부러 망가뜨렸어요. nginx 설정에서 볼 곳은 여기예요.
location /app/ {
proxy_pass http://backend:3000/; # 뒤쪽 앱으로 넘김
proxy_connect_timeout 3s;
proxy_read_timeout 3s; # 3초 안에 답 없으면 포기
}
① 앱 컨테이너는 켜져 있는데 앱 프로그램이 안 떠 있을 때는 바로 502 가 났어요.
$ curl -s -o /dev/null -w '%{http_code} %{time_total}s' http://127.0.0.1:18924/app/ok
502 0.002352s
# nginx 오류 로그
[error] connect() failed (111: Connection refused) while connecting to upstream,
request: "GET /app/ok HTTP/1.1", upstream: "http://172.20.0.2:3000/ok"
[error] connect() failed (111: Connection refused) while connecting to upstream,
request: "GET /ok.php HTTP/1.1", upstream: "fastcgi://172.20.0.3:9000"
"Connection refused"는 그 주소의 문을 두드렸더니 "여기 아무도 없어요"라는 답이 바로 왔다는 뜻이에요. Node 앱이든 PHP-FPM 이든 같은 문구가 찍혔어요.
② 앱이 너무 늦게 답할 때는 5초 걸리는 주소를 불렀더니 3초 기다리다 504 가 났어요.
504 3.142120s [error] upstream timed out (110: Operation timed out) while reading response header from upstream
③ 앱 서버(컨테이너)를 통째로 내렸을 때는 502 가 날 줄 알았는데 504 였어요. 문을 두드려도 아무 답이 없으니 정해진 시간만큼 기다린 거예요. 타임아웃을 따로 정하지 않은 PHP 쪽은 기본값대로 1분 넘게(62.9초) 기다렸어요.
504 3.155972s [error] upstream timed out (110: Operation timed out) while connecting to upstream
nginx 타임아웃을 3초로 줄여 둔 상태에서 잰 값이에요.
표로 보기
| 상황 | 응답 | 걸린 시간 | nginx 로그에 찍힌 문구 |
|---|---|---|---|
| 앱 프로그램 꺼짐 | 502 | 0.002초 | connect() failed (111: Connection refused) |
| 앱이 5초 걸림 | 504 | 3.14초 | upstream timed out … while reading response header |
| 앱 서버 통째로 없음 | 504 | 3.16초(PHP 는 62.9초) | upstream timed out … while connecting |
원인별 해결 순서
| 순서 | 할 일 | 명령 예 |
|---|---|---|
| 1 | nginx 오류 로그에서 문구 확인 | tail -n 50 /var/log/nginx/error.log |
| 2 | Connection refused 면 앱이 떠 있는지 확인·재시작 | systemctl status 앱이름, pm2 list, docker ps |
| 3 | 앱이 실제로 듣는 포트와 proxy_pass 포트 맞추기 | ss -ltnp 로 열린 포트 확인 |
| 4 | timed out 이면 느린 처리 찾기, 필요하면 타임아웃 조정 | proxy_read_timeout 60s; |
| 5 | 앱이 자꾸 죽으면 메모리·로그 확인 | free -m, 앱 로그의 마지막 줄 |
| 6 | 설정을 바꿨다면 검사 후 반영 | nginx -t && nginx -s reload |
실습에서도 앱을 다시 띄우고 nginx -t(설정 문법 검사 통과)와 nginx -s reload 를 하자 같은 주소가 200 으로 돌아왔어요.
방문자라면 잠시 뒤 새로고침해 보세요. 배포 중 잠깐 생기는 502 가 많아요. 계속되면 사이트 쪽 문제라 운영자에게 알려 주는 수밖에 없어요.
502 와 504, 500 은 뭐가 달라요?
| 코드 | 상담원 비유 | 먼저 볼 곳 |
|---|---|---|
| 502 | 담당 부서에 전화했는데 "없는 번호"라고 바로 끊김 | 앱이 떠 있는지, 포트 |
| 504 | 담당 부서가 전화를 안 받아 기다리다 포기 | 느린 처리, 타임아웃, 서버가 살아 있는지 |
| 500 | 담당 부서가 받았는데 "일이 잘못됐어요" | 앱 로그(500 에러) |
다시 안 나게 하려면
- 앱을 프로세스 관리자(systemd·pm2·도커 재시작 정책)로 돌려서 죽으면 자동으로 다시 뜨게 해요.
- 배포할 때 새 앱이 뜬 걸 확인한 뒤 옛 앱을 내려요. 그 사이 몇 초가 502 의 단골 원인이에요.
- 메모리가 빠듯하면 사양을 올리거나 앱 수를 줄여요.
퓨쳐인프라에서는
퓨쳐인프라 앱 호스팅은 앞단(HTTPS 주소)을 대신 맡아 줘요. 앱이 안 뜨거나 죽으면 콘솔·API 에서 앱 로그를 바로 볼 수 있어요. 502 가 보이면 로그의 마지막 줄부터 보세요. 가상서버에 nginx 를 직접 둔 경우엔 위 순서를 그대로 쓰면 돼요. 메모리가 모자라면 서버를 멈춘 뒤 사양을 바꿀 수 있어요.
가입하면 2,000원 크레딧이 들어와서 작은 서버로 이 실습을 똑같이 해 볼 수 있어요.
자주 묻는 질문
502 Bad Gateway 는 제 컴퓨터 문제인가요?
거의 아니에요. 사이트의 앞 서버와 뒤쪽 앱 사이 문제예요. 다른 기기에서도 같으면 확실해요.
Cloudflare 화면의 502 는 어디 문제예요?
CDN 이 원래 서버에서 제대로 된 답을 못 받은 거예요. 원래 서버(nginx·앱)가 살아 있는지부터 보세요.
타임아웃을 크게 늘리면 해결되나요?
504 는 줄 수 있지만 느린 원인은 그대로예요. 방문자도 그만큼 기다려요. 느린 쿼리·외부 API 를 먼저 찾으세요.
배포할 때마다 잠깐 502 가 떠요.
옛 앱을 내리고 새 앱이 뜨기 전 빈틈 때문이에요. 새 앱이 뜬 걸 확인하고 바꾸는 무중단 배포로 없앨 수 있어요.
관련 용어
500 에러 · 404 에러 · 캐시 · CDN · 프록시 · 서버란
이 글의 숫자 출처
- 실습은 우리 PC 도커(nginx 1.30.6-alpine, node 24-bookworm-slim, php 8.3.36-fpm)에서 2026-10-29 23:35~23:37 KST 에 했어요. 로그는 그대로 옮기고 접속 IP·서버 이름만 뺐어요.
- 상태 코드 정의 RFC 9110 · MDN 502
- 타임아웃 설정 nginx proxy 모듈 문서
- 글쓴이는 서순명(솔리드그루 이사)이에요. 솔리드그루는 국내 IDC 에서 클라우드 서버·앱 호스팅·AI API 서비스 퓨쳐인프라를 운영해요. 2026-10-29에 썼어요.
- 운영사는 솔리드그루예요. 사업자등록번호 875-44-00335 · 서울특별시 구로구 디지털로29길 38, 7층 707호 · 전화 02-6933-6229 · support@futureinfra.ai · 고객센터 · 이용약관
- 한계도 있어요. 실습은 우리 PC 의 도커(nginx 1.30.6, Node 24, PHP 8.3.36-FPM)에서 일부러 앱을 끄고 늦춘 거예요. 실제 서비스는 CDN·로드밸런서가 더 끼어 있을 수 있어요.
- 이해관계를 밝혀 둬요. 퓨쳐인프라 앱 로그·서버 사양 변경을 안내했어요(자사 서비스).
연관 서비스
많이 본 글
-
블로그
도메인 구매 사이트 추천 2026 — 가비아·후이즈 등 15곳 갱신·이전비 비교
같은 .co.kr 도 등록업체 15곳의 3년 값이 3.8만~8.6만 원이에요(11월 3일 KRNIC 표). 갱신가·이전비·해외 업체 조건, 11월 인상 뒤 가비아 실제 화면, 구매처 확인과 기관이전까지 정리했어요. -
블로그
무료 도메인 사이트 추천 2026 — 내도메인.한국·DuckDNS 발급 방법
내도메인.한국·DuckDNS 처럼 계속 무료인 주소 10곳을 11월 3일 서울에서 다시 재고(6곳 6ms 안), 발급 순서·구글·네이버 무료 주소·'첫해 무료'의 2년째 값까지 정리했어요. -
블로그
클로드 MCP·Gemini MCP 연동 방법 2026, MCP 서버 9곳
클로드 MCP(데스크톱·Claude Code)와 Gemini MCP 연동(Gemini CLI·안티그래비티·Gemini 앱·API) 등 9곳의 MCP 서버 연결법을 공식 문서로 정리했어요. 원격 57ms 실측과 오류 해결까지. -
블로그
Gemini 3.9 Flash 나왔나요? 지금 최신은 3.8 Flash — 3.7과 직접 잰 속도·비용
2026년 9월 22일 기준 Gemini 3.9 Flash는 미출시입니다. 최신 3.8 Flash의 사양·가격(2027년 2배 인상)과, 3.7 Flash와 같은 과제로 직접 잰 속도·비용·JSON 형식 준수 차이를 정리했습니다. -
블로그
서버비 한 달 얼마? 방문자 10만 명도 월 3만 2천 원(2026 계산)
월 방문자 1천·1만 명은 1만 4천 원, 10만 명은 3만 2천 원이에요. 요금제별 트래픽 기본 제공량까지 넣어 다시 계산하고 AWS·카페24·가비아·네이버클라우드 값과 숨은 비용을 비교했어요(2026-10-26 확인).
댓글
로그인하면 댓글을 남길 수 있습니다.