728x90

Nginx는 서버 블록 (Apache의 가상 호스트)을 수행 할 수 있는 기능이 있지만 프록시 헤더 내에서 IP 주소를 전달해야 할 때 문제가 발생합니다.

프록시 서버 뒤에 위치한 서버들에서는 실제 방문자의 IP가 아닌 프록시 서버의 IP만 보인다는 점입니다.

하지만 해결책이 있습니다.

 

※ 프록시 서버 구성 편집

(Docker 사용 경우 - <path to nginx-proxy-manager>/data/nginx/default_host/site.conf)

 

먼저 프록시 서버(프론트엔드)에 있는 프록시 서버 블록을 편집합니다. 기본적으로 내 모습은 다음과 같습니다.

 

## redirect uname.in to https

server {

  listen      80 default_server;

  server_name uname.in;

  return 301 https://uname.in;

}

 

## redirect www prefix to https

server {

  listen      80;

  server_name www.uname.in;

  return 301 https://www.uname.in;

}

 

server {

  #listen 80;

  listen 443 ssl default_server;

  server_name uname.in;

  ssl_certificate /etc/nginx/ssl/uname.in.crt;

  ssl_certificate_key /etc/nginx/ssl/uname.in.key;

 

  location / {

    proxy_set_header  Host $host;

    proxy_set_header  X-Real-IP $remote_addr;

    proxy_set_header  X-Forwarded-Proto https;

    proxy_set_header  X-Forwarded-For $remote_addr;

    proxy_set_header  X-Forwarded-Host $remote_addr;

    proxy_pass        http://wp.uname.in;

  }

}

 

다음 세 줄을 포함하는 것이 매우 중요합니다.

Host : 프록시 서버의 이름과 포트.

X-Real-IP : 방문자의 IP 주소를 가상 호스트로 보냅니다.

X-Forwarded-For : 방문자의 IP 주소를 가상 호스트로 보냅니다.

 

※ 프록시 되는 서버 구성 편집

(/etc/nginx/sites-available/default)

 

이제 프록시 서버(백엔드)의 구성에서 서버 블록 내에 아래 3개의 중요한 행을 포함해야 하지만 위치 블록 외부에 있어야 합니다.

 

server {

    #other junk here blah blah

    set_real_ip_from 10.0.0.0/8;

    real_ip_header X-Real-IP;

    real_ip_recursive on;

 

    location / {

       #some junk here

    }

}

 

세 줄은 다음과 같습니다.

 

set real ip_from : nginx가 이 범위 내의 프록시 서버에서 실제 방문자의 IP를 가져 오도록 지시합니다. 10.0.9.2와 같은 고정 IP 주소 일 수도 있습니다.

real_ip_header : nginx는 주어진 주소에서 클라이언트의 IP 주소를 선택합니다.

real_ip_recursive : 프록시 서버의 IP가 방문자의 IP 주소로 대체됩니다.

+ Recent posts