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 주소로 대체됩니다.