B2B Solution/트러블슈팅

Nginx 502 Bad Gateway 오류 해결 가이드: 원인 분석 및 단계별 해결책

SangPedia 2026. 4. 4. 19:27
반응형

Nginx 502 Bad Gateway 오류 해결 가이드: 원인 분석 및 단계별 해결책

웹 서비스 운영 중 Nginx에서 "502 Bad Gateway" 오류가 발생하는 것은 흔한 문제 중 하나입니다. 이 오류는 사용자 경험을 저해하고 서비스 가용성을 떨어뜨릴 수 있으므로 신속하게 해결해야 합니다. 이 글에서는 502 Bad Gateway 오류의 원인을 분석하고, 단계별 해결 방법을 제시하여 IT 관리자 및 엔지니어가 문제 해결에 도움을 받을 수 있도록 돕습니다.

Nginx 502 Bad Gateway 오류 해결 가이드: 원인 분석 및 단계별 해결책

에러 현상

502 Bad Gateway 오류는 Nginx가 리버스 프록시 또는 로드 밸런서로 작동할 때, 백엔드 서버로부터 유효하지 않은 응답을 받았음을 의미합니다. 웹 브라우저에는 다음과 같은 오류 메시지가 표시될 수 있습니다.

502 Bad Gateway
nginx/1.18.0 (Ubuntu)
502 Bad Gateway
nginx
502 Bad Gateway: The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.

한글 해석:

502 Bad Gateway 오류는 서버가 게이트웨이 또는 프록시 역할을 하는 동안, 업스트림 서버로부터 유효하지 않은 응답을 받았음을 나타냅니다. 이는 백엔드 서버가 응답하지 않거나, 예상치 못한 오류를 반환했을 때 발생합니다.

발생 환경:

  • OS: Ubuntu 20.04
  • Web Server: Nginx 1.18.0
  • Application Server: Node.js
  • 상황: 웹 사이트 접속 시 간헐적으로 502 Bad Gateway 오류 발생. 트래픽이 많은 시간대에 주로 발생하며, 특정 페이지에서만 발생하는 경우도 있음.

스크린샷 대체 텍스트:

웹 브라우저 화면에 "502 Bad Gateway nginx" 오류 메시지가 표시된 모습. Nginx 버전 정보가 함께 표시되어 있으며, 오류 메시지 아래에는 "nginx"라는 텍스트가 나타남.

원인 분석

502 Bad Gateway 오류는 다양한 원인으로 인해 발생할 수 있습니다. 주요 원인과 확인 방법은 다음과 같습니다.

1. 백엔드 서버 응답 없음 또는 시간 초과

가장 흔한 원인 중 하나는 백엔드 서버가 다운되었거나, 과부하로 인해 요청을 처리하지 못하는 경우입니다. Nginx는 백엔드 서버로부터 응답을 기다리지만, 지정된 시간 내에 응답을 받지 못하면 502 오류를 반환합니다.

확인 방법:

  • 백엔드 서버의 상태를 확인합니다. 서버가 실행 중인지, CPU 및 메모리 사용량이 정상 범위 내에 있는지 확인합니다.
systemctl status your-backend-service
  • Nginx의 에러 로그(/var/log/nginx/error.log)를 확인하여 백엔드 서버와의 연결 문제 또는 시간 초과 관련 오류 메시지가 있는지 확인합니다.
tail -f /var/log/nginx/error.log

2. Nginx 설정 오류

잘못된 Nginx 설정 또한 502 오류를 유발할 수 있습니다. 특히 proxy_pass 지시어가 잘못 설정되었거나, 타임아웃 설정이 너무 짧은 경우 문제가 발생할 수 있습니다. 출처: potato-hyun.tistory.com

확인 방법:

  • Nginx 설정 파일(/etc/nginx/nginx.conf 또는 /etc/nginx/conf.d/your-site.conf)을 확인하여 proxy_pass 지시어가 올바르게 설정되었는지 확인합니다. 백엔드 서버의 주소와 포트가 정확하게 지정되어 있는지 확인해야 합니다.
location / {
    proxy_pass http://your-backend-server:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
  • proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout 등의 타임아웃 설정이 적절한지 확인합니다. 필요에 따라 타임아웃 값을 늘려줍니다.
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;

3. 네트워크 문제

Nginx와 백엔드 서버 간의 네트워크 연결 문제 또한 502 오류를 발생시킬 수 있습니다. 방화벽 설정, DNS 문제, 또는 라우팅 문제 등이 원인이 될 수 있습니다.

확인 방법:

  • Nginx 서버에서 백엔드 서버로 ping 명령어를 사용하여 네트워크 연결 상태를 확인합니다.
ping your-backend-server
  • traceroute 명령어를 사용하여 Nginx 서버에서 백엔드 서버까지의 라우팅 경로를 확인합니다. 예상치 못한 경로로 트래픽이 우회되는 경우 네트워크 설정을 점검해야 합니다.
traceroute your-backend-server
  • 방화벽 설정이 Nginx와 백엔드 서버 간의 통신을 차단하고 있는지 확인합니다. 필요한 포트가 열려 있는지 확인해야 합니다.

Mermaid diagram: graph TD

해결 방법

각 원인에 따른 해결 방법은 다음과 같습니다.

1. 백엔드 서버 응답 없음 또는 시간 초과

해결 방법: 백엔드 서버를 재시작하고, 서버의 리소스 사용량을 모니터링하여 과부하 여부를 확인합니다. 필요에 따라 서버의 스케일 업 또는 스케일 아웃을 고려합니다.

  • 실행 전 확인: 백엔드 서버의 상태를 확인합니다.
systemctl status your-backend-service
  • 조치: 백엔드 서버를 재시작합니다.
systemctl restart your-backend-service
  • 실행 후 검증: 웹 사이트에 접속하여 502 오류가 해결되었는지 확인합니다. 서버의 CPU 및 메모리 사용량을 모니터링합니다.

2. Nginx 설정 오류

해결 방법: Nginx 설정 파일을 수정하여 proxy_pass 지시어를 올바르게 설정하고, 타임아웃 값을 적절하게 조정합니다. 설정 변경 후 Nginx를 재시작하여 변경 사항을 적용합니다.

  • 실행 전 확인: Nginx 설정 파일을 백업합니다.
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
  • 조치: Nginx 설정 파일을 수정합니다. (예: /etc/nginx/nginx.conf 또는 /etc/nginx/conf.d/your-site.conf)
location / {
    proxy_pass http://your-backend-server:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
}
  • 실행 후 검증: Nginx 설정 파일의 문법 오류를 확인하고, Nginx를 재시작합니다.
nginx -t
systemctl restart nginx

3. 네트워크 문제

해결 방법: Nginx와 백엔드 서버 간의 네트워크 연결을 점검하고, 방화벽 설정을 확인하여 필요한 포트가 열려 있는지 확인합니다. DNS 문제 또는 라우팅 문제가 있는 경우 네트워크 설정을 수정합니다.

  • 실행 전 확인: Nginx 서버에서 백엔드 서버로 ping 명령어를 사용하여 네트워크 연결 상태를 확인합니다.
ping your-backend-server
  • 조치: 방화벽 설정을 수정하여 필요한 포트를 엽니다. (예: ufw allow 3000)
ufw allow 3000
ufw status
  • 실행 후 검증: 웹 사이트에 접속하여 502 오류가 해결되었는지 확인합니다. traceroute 명령어를 사용하여 라우팅 경로를 확인합니다.

Mermaid diagram: sequenceDiagram

network troubleshooting diagram

예방 조치

502 Bad Gateway 오류를 예방하기 위해 다음과 같은 조치를 취할 수 있습니다.

  • 백엔드 서버 모니터링: 백엔드 서버의 CPU, 메모리, 디스크 사용량 등을 지속적으로 모니터링하여 과부하를 사전에 감지하고 대응합니다. Prometheus와 Grafana를 사용하여 시각적인 대시보드를 구축할 수 있습니다.
# Prometheus exporter 예시 (Python)
from prometheus_client import start_http_server, Summary
import random
import time

REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')

@REQUEST_TIME.time()
def process_request(t):
    """A dummy function that takes some time."""
    time.sleep(t)

if __name__ == '__main__':
    # Start up the server to expose the metrics.
    start_http_server(8000)
    # Generate some requests.
    while True:
        process_request(random.random())
  • 자동 스케일링: 트래픽 변화에 따라 백엔드 서버의 수를 자동으로 조절하는 자동 스케일링 시스템을 구축합니다. AWS Auto Scaling, Kubernetes Horizontal Pod Autoscaler 등을 활용할 수 있습니다.
  • 헬스 체크: Nginx에서 백엔드 서버의 상태를 주기적으로 확인하는 헬스 체크 기능을 활성화하여, 비정상적인 서버를 자동으로 로드 밸런싱 대상에서 제외합니다. 출처: stackify.com
upsream backend {
    server your-backend-server1:3000;
    server your-backend-server2:3000;
    health_check interval=5s fails=3 passes=2;
}

location / {
    proxy_pass http://backend;
}
  • 정기 점검: Nginx 설정 파일 및 백엔드 서버의 설정을 정기적으로 점검하여 오류를 사전에 발견하고 수정합니다. 다음은 정기 점검 체크리스트의 예시입니다.
    • Nginx 설정 파일의 문법 오류 확인
    • proxy_pass 지시어의 정확성 확인
    • 타임아웃 설정의 적절성 확인
    • 백엔드 서버의 상태 확인
    • 네트워크 연결 상태 확인
    • 방화벽 설정 확인

관련 에러/참고 자료

  • 500 Internal Server Error: 서버 내부 오류로, 백엔드 서버에서 예외가 발생하거나, 예상치 못한 문제가 발생했을 때 나타납니다.
  • 503 Service Unavailable: 서버가 일시적으로 요청을 처리할 수 없을 때 나타납니다. 서버 과부하 또는 유지보수 작업으로 인해 발생할 수 있습니다.
  • 504 Gateway Timeout: 게이트웨이 또는 프록시 역할을 하는 서버가 백엔드 서버로부터 지정된 시간 내에 응답을 받지 못했을 때 나타납니다.

자세한 내용은 다음 문서를 참고하십시오.

FAQ

자주 묻는 질문과 답변은 다음과 같습니다.

Q1: Nginx에서 502 Bad Gateway 오류는 왜 발생하나요?

A1: 502 Bad Gateway 오류는 Nginx가 리버스 프록시 또는 로드 밸런서로 작동할 때, 백엔드 서버로부터 유효하지 않은 응답을 받았음을 의미합니다. 이는 백엔드 서버의 과부하, 애플리케이션 오류, 네트워크 문제, 또는 Nginx 설정 오류 등 다양한 원인으로 발생할 수 있습니다.

Q2: 502 Bad Gateway 오류가 발생하는 것이 제 잘못인가요?

A2: 반드시 그렇지는 않습니다. 502 Bad Gateway 오류는 서버 간의 통신 문제로 인해 발생하며, 이는 사용자의 직접적인 잘못이라기보다는 서버 관리자 또는 개발자의 책임일 가능성이 큽니다. 하지만 클라이언트 측의 문제(예: 잘못된 DNS 설정)로 인해 발생할 수도 있습니다.

Q3: 502 오류와 503 오류의 차이점은 무엇인가요?

A3: 502 Bad Gateway 오류는 게이트웨이 또는 프록시 역할을 하는 서버가 백엔드 서버로부터 유효하지 않은 응답을 받았음을 나타냅니다. 반면, 503 Service Unavailable 오류는 서버가 일시적으로 요청을 처리할 수 없음을 나타냅니다. 503 오류는 일반적으로 서버 과부하 또는 유지보수 작업으로 인해 발생합니다.


반응형