핵심 요약
502 Bad Gateway는 nginx 자체가 아니라 뒤에 있는 앱(업스트림)에서 제대로 응답을 못 받았다는 뜻이다. ① 앱이 죽었는지, ② proxy_pass 주소/포트·소켓 경로가 맞는지, ③ 응답이 타임아웃됐는지, ④ (소켓이면) 권한 문제인지 순서로 본다. nginx 에러 로그가 정확한 원인을 알려준다.
1. 점검 순서
# 1) nginx 에러 로그가 1순위
tail -f /var/log/nginx/error.log
# 2) 앱이 떠 있는지
curl -I http://127.0.0.1:3000
systemctl status myapp
2. 원인별
| 로그 단서 | 원인 |
|---|---|
| Connection refused | 앱 다운/포트 불일치 |
| upstream timed out | 앱 응답 지연 → proxy_read_timeout↑ |
| permission denied(소켓) | nginx 유저가 소켓 접근 불가 |
3. 함정
- 앱은 살아있는데 127.0.0.1 대신 잘못된 호스트로 listen → refused
- 대용량 응답·웹소켓은 버퍼·업그레이드 헤더 설정 필요
- SELinux/AppArmor가 nginx의 네트워크/소켓 접근을 막기도 한다
자주 묻는 질문
502인지 504인지 차이가 뭔가요?
502는 업스트림에서 유효하지 않은 응답(주로 연결 실패), 504는 업스트림이 시간 내 응답하지 않은 타임아웃입니다. 504면 앱이 느린 것이니 처리 시간이나 타임아웃 설정을 보세요.
앱은 켜져 있는데 502가 납니다.
nginx가 보는 주소/포트와 앱이 실제 바인딩한 주소가 다를 가능성이 큽니다. 127.0.0.1:포트로 직접 curl해 확인하세요.

댓글 0