🔍 검색 키워드: Nginx 502 Bad Gateway 해결, Nginx upstream 502 에러, upstream connect() failed, Nginx 리버스 프록시 502, upstream timed out 해결
증상: 502 Bad Gateway 에러 발생
Nginx를 리버스 프록시로 사용할 때 클라이언트가 갑자기 502 Bad Gateway 에러를 마주치는 경우가 있습니다. 브라우저에는 아무 설명도 없고, Nginx 에러 로그를 보면 이런 메시지가 남습니다:
2026/09/18 09:12:34 [error] 12345#12345: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 1.2.3.4, server: example.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "example.com"
2026/09/18 09:13:01 [error] 12345#12345: *2 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 1.2.3.4, upstream: "http://127.0.0.1:8080/"
원인: upstream 서버 연결 실패
Nginx 502 에러의 원인은 크게 세 가지입니다:
- upstream 서버가 죽어 있음 — WAS(Spring Boot, Node.js 등)가 다운됨
- upstream 응답 시간 초과 — 서버는 살아있지만 너무 느리게 응답
- SELinux/방화벽 차단 — 네트워크 정책이 연결을 막음
먼저 어떤 케이스인지 확인해야 합니다:
# upstream 서버 포트 확인
ss -tlnp | grep 8080
# 서비스 상태 확인
systemctl status myapp
# Nginx 설정 문법 확인
nginx -t
해결 방법
케이스 1: upstream 서버가 꺼진 경우 → 재시작
# systemd 서비스라면
sudo systemctl restart myapp
# nohup으로 띄운 Spring Boot라면
nohup java -jar /opt/myapp/app.jar > /var/log/myapp.log 2>&1 &
케이스 2: 응답 시간 초과 → 타임아웃 설정 조정
Nginx의 기본 proxy_read_timeout은 60초입니다. 배치 처리나 파일 업로드처럼 오래 걸리는 요청은 이 값을 늘려야 합니다:
server {
location / {
proxy_pass http://127.0.0.1:8080;
proxy_connect_timeout 10s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
설정 변경 후 반드시 reload:
sudo nginx -s reload
케이스 3: SELinux가 연결 차단 → 정책 허용
CentOS/RHEL 계열에서 SELinux가 활성화된 경우 Nginx가 upstream에 연결하지 못할 수 있습니다:
# SELinux 상태 확인
getenforce
# Nginx → upstream 네트워크 연결 허용
sudo setsebool -P httpd_can_network_connect on
케이스 4: upstream 이중화로 장애 대응
단일 upstream이 죽으면 502가 납니다. 백업 서버를 설정해두면 자동 전환됩니다:
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081 backup;
}
server {
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout http_502;
}
}
에러 유형별 빠른 참고표
| 에러 로그 키워드 | 원인 | 해결 |
|---|---|---|
| Connection refused (111) | upstream 프로세스 다운 | 서비스 재시작 |
| upstream timed out (110) | 응답 지연 / 타임아웃 | proxy_read_timeout 증가 |
| Permission denied (13) | SELinux/방화벽 차단 | setsebool 또는 방화벽 해제 |
| no live upstreams while connecting | upstream 전체 다운 | 백업 서버 추가 |
Nginx 502는 대부분 upstream 프로세스 상태 확인 → 타임아웃 튜닝 → SELinux 정책 순서로 해결됩니다. 에러 로그의 키워드를 보고 케이스를 특정하면 대부분 10분 안에 잡을 수 있습니다.