나의 잡다한 노트 및 메모

nginx 설정 중 proxy 관련 설정 본문

DevOps/Reverse_proxy

nginx 설정 중 proxy 관련 설정

peanutwalnut 2025. 3. 19. 16:47

1. proxy_set_header Host $host;

  • 목적:
    백엔드 서버에 전달되는 Host 헤더를 프록시가 수신한 원래의 호스트(도메인) 값으로 설정합니다.
  • 작동 방식:
    • $host는 클라이언트가 요청 시 사용한 호스트 이름(예: example.com) 또는 IP 주소를 의미합니다.
    • 이를 통해 백엔드 서버는 원래 클라이언트가 어떤 호스트로 요청했는지를 정확히 인지할 수 있습니다.
    • 백엔드 서버가 가상 호스팅(도메인별 설정) 등을 사용하는 경우, 올바른 도메인 정보를 알아야 정상적으로 동작합니다.

2. proxy_set_header X-Real-IP $remote_addr;

  • 목적:
    백엔드 서버가 클라이언트의 실제 IP 주소를 알 수 있도록, X-Real-IP 헤더에 클라이언트의 원 IP를 전달합니다.
  • 작동 방식:
    • $remote_addr는 Nginx가 수신한 실제 클라이언트 IP 주소입니다.
    • 백엔드 서버는 일반적으로 프록시로부터 들어온 요청의 소스 IP를 보면 127.0.0.1(프록시 서버) 등으로 인식할 수 있으나, 이 헤더를 통해 원본 클라이언트 IP를 식별할 수 있습니다.

3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  • 목적:
    여러 개의 프록시를 거쳐서 온 경우에도, 백엔드 서버가 클라이언트의 전체 경로를 알 수 있도록 X-Forwarded-For 헤더를 설정합니다.
  • 작동 방식:
    • $proxy_add_x_forwarded_for는 기존 X-Forwarded-For 헤더에 $remote_addr(현재 프록시가 인지한 클라이언트 IP)를 추가하여 전달합니다.
    • 이렇게 하면 요청이 어떤 IP를 거쳐 왔는지 프록시 체인을 추적할 수 있습니다.

4. proxy_set_header X-Forwarded-Proto $scheme;

  • 목적:
    백엔드 서버가 클라이언트의 프로토콜(HTTP or HTTPS) 정보를 알 수 있도록 X-Forwarded-Proto 헤더에 설정합니다.
  • 작동 방식:
    • $scheme는 Nginx가 인지한 현재 요청 프로토콜(예: http 또는 https)을 나타냅니다.
    • 백엔드가 리다이렉트 생성, URL 생성 시 올바른 프로토콜을 사용하도록 도와줍니다. 예: “https로 접속했는데, 백엔드가 http 주소로 리다이렉트하는 문제”를 방지.