← 전체 글로 돌아가기

서버 운영

Nginx 리버스 프록시 설정 후 트래픽이 안 통할 때

Nginx에서 프록시 규칙을 설정했는데 요청이 제대로 전달되지 않을 때의 확인 순서를 정리했습니다.

로컬에서는 잘 동작하던 Nginx 설정도 배포 환경에서는 다르게 동작할 수 있다. 트래픽 경로를 단계별로 따라가면서 문제를 찾아야 한다.

DNS와 도메인 확인

먼저 도메인이 올바른 IP로 해석되는지 확인한다.

dig example.com
dig example.com +short
nslookup example.com

공개 DNS(8.8.8.8)와 로컬 DNS 응답이 다르면 캐시 문제일 수 있다. 도메인이 올바른 서버 IP를 가리키고 있는지 먼저 확인해야 한다.

Nginx 설정 문법과 로드

sudo nginx -t
sudo systemctl reload nginx

설정 문법이 정확한지 검증한 후에 리로드한다. 특히 proxy_pass, upstream 블록의 프로토콜(http/https)과 포트 번호를 확인해야 한다.

실제 트래픽 경로

curl -I https://example.com
curl -v https://example.com 2>&1 | grep -E '^<|^>|^\*'

요청이 어디로 리다이렉트되고 있는지, 프록시되고 있는지 확인한다. 응답 헤더의 Server 필드를 보면 어느 백엔드 서버에서 응답하고 있는지 알 수 있다.

캐시와 HTTP 상태 코드

curl -I -H "Cache-Control: no-cache" https://example.com

HTTP 상태 코드가 200인지, 3xx 리다이렉트는 없는지 확인한다. 만약 502나 504 에러가 나면 백엔드 서버가 응답하지 않거나 타임아웃된 것이다.

프록시 헤더 검증

Nginx에서 X-Forwarded-For, X-Real-IP 같은 헤더를 제대로 전달하고 있는지 확인한다.

curl -v https://example.com 2>&1 | grep -i "x-forwarded"

백엔드 애플리케이션이 이 헤더들을 읽지 못하면 IP 주소를 잘못 인식할 수 있다.

문제 해결 체크리스트

  1. DNS가 올바른 IP를 반환하는가
  2. Nginx 설정 문법이 맞는가
  3. 백엔드 서버가 실제로 요청을 받고 있는가
  4. HTTP 상태 코드가 정상인가 (200, 301 등)
  5. 필요한 헤더들이 전달되고 있는가

프록시 설정은 작은 오타도 전체 경로를 막을 수 있으니 한 번에 하나씩 확인하는 게 중요하다.