서버 운영
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 주소를 잘못 인식할 수 있다.
문제 해결 체크리스트
- DNS가 올바른 IP를 반환하는가
- Nginx 설정 문법이 맞는가
- 백엔드 서버가 실제로 요청을 받고 있는가
- HTTP 상태 코드가 정상인가 (200, 301 등)
- 필요한 헤더들이 전달되고 있는가
프록시 설정은 작은 오타도 전체 경로를 막을 수 있으니 한 번에 하나씩 확인하는 게 중요하다.