|
이 모듈은 클라이언트 요청 헤더의 클라이언트 IP 주소 값을 변경할 수 있게 해줍니다(예: X-Real-IP 또는 X-Forwarded-For). 이 기능은 Nginx가 일부 7계층 부하 분산 프록시 뒤에서 작동하는 경우 매우 유용합니다. 클라이언트 요청의 로컬 IP(즉, 클라이언트의 요청 주소)가 레이어 7 프록시를 통과할 때 클라이언트 IP 주소 헤더에 추가되어 백엔드 Nginx가 클라이언트의 IP 주소 값을 얻을 수 있기 때문입니다. 모듈은 기본적으로 설치되어 있지 않으니, 모듈을 사용하려면 설치 컴파일 시 -with-http_realip_module 옵션을 추가해야 합니다. 이 모듈을 사용하는 이유는 백그라운드 서버가 원래 클라이언트의 IP 주소를 기록할 수 있게 하기 때문입니다. 구성 예시set_real_ip_from 192.168.1.0/24; set_real_ip_from 192.168.2.1; real_ip_header X-Real-IP;
손가락 순서 이 모듈은 단 두 가지 명령어만 제공합니다. 명령어 이름: set_real_ip_from 함수: 이 명령어를 통해 신뢰할 수 있는 주소를 지정하는 것은 정확한 IP 주소로 대체됩니다. 신뢰할 수 있는 Unix 소켓도 버전 0.8.22부터 사용할 수 있습니다. 여기서 IP 집합은 프론트엔드를 의미합니다은긴스、바니시또는오징어의IP주소. 문법: set_real_ip_from [주소| CIDR|" 유닉스:"] 기본 값: 없음 사용 환경: http, 서버, 위치 명령어 이름: real_ip_header 기능: 이 명령어는 IP 주소를 대체할 헤더를 설정하는 데 사용됩니다. X-Forwarded-For를 사용할 경우, 모듈은 프론트엔드 프록시의 IP 주소를 X-Forwarded-For 헤더의 마지막 IP 주소로 대체합니다. 문법: real_ip_header [X-Real-IP| X-전달됨] 기본 값: real_ip_header x-real-IP 사용 환경: http, 서버, 위치 사용 사례 다음 예시에서 우리 환경은 다음과 같습니다: 두 개의 Nginx 서버가 있는데, 하나는 프론트엔드이고 다른 하나는 백엔드입니다. 프론트엔드 Nginx는 프록시로 사용되고 백엔드 Nginx는 페이지 접근 권한을 제공하며, 다음 IP 주소를 가진 클라이언트도 있습니다: Frontend Nginx: 192.168.7.10 Backend Nginx: 192.168.1.15 클라이언트 호스트: 218.239.201.36 프론트엔드의 Nginx 구성은 다음과 같습니다: 서버 { 듣기 80; server_name www.xx.com;
위치 / { 루트 html; 지수 index.html index.htm; 차르셋 UTF-8; }
위치 /865 { proxy_pass http://192.168.3.139:80/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header 호스트 $host; proxy_redirect 떠나고; }
……
} 백엔드의 Nginx 구성은 다음과 같습니다: 서버 { 듣기 80; server_name localhost;
위치 / { 루트 /var/www/html; 지수 index.html index.htm; } 시험 접근법 http://www.xx.com/865 에 접근하면 문제없이 정상적으로 접근할 수 있습니다. 접근 기록은 다음과 같습니다: 프론트엔드 Nginx의 로그: 218.239.201.36 - - [2011년 8월 30일:16:09:56 +0800] "GET /865/ HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; 윈도우 NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" 백엔드 Nginx의 로그: 192.168.7.10 - - [2011년 8월 30일:16:09:56 +0800] "GET // HTTP/1.0" 200 151 "-" "Mozilla/5.0 (Windows; U; 윈도우 NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" 백엔드 Nginx 로그는 원래 클라이언트의 IP 주소를 기록하지 않고, 프론트엔드 Nginx의 IP 주소를 기록합니다. 만약 백그라운드 Nginx 서버의 구성을 다음과 같이 수정한다면: 서버 { 듣기 80; server_name localhost; set_real_ip_from 192.168.3.0/24; set_real_ip_from 100.100.0/16; real_ip_header X-Real-IP;
위치 / { 루트 html; 지수 index.html index.htm; }
……
}
그 다음 다시 접근 테스트를 합니다: 프론트엔드 Nginx의 로그: 218.239.201.36 - - [2011년 8월 30일:16:10:28 +0800 "GET /865/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; 윈도우 NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" 백엔드 Nginx의 로그: 218.239.201.36 - - [2011년 8월 30일:16:10:28 +0800] "GET // HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows; U; 윈도우 NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" 이번에는 백그라운드에서 클라이언트의 IP 주소를 기록하는 것을 알 수 있습니다.
|