nginx 세 가지 사용자 의 실제 ip 를 얻 는 방법

5820 단어
nginx 의 급속 한 발전 에 따라 점점 더 많은 회사 들 이 apache 를 nginx 로 바 꾸 는 동시에 점점 더 많은 사람들 이 nginx 를 부하 균형 으로 사용 하고 프 록 시 앞 에 CDN 가속 도 추가 할 수 있 지만 이에 따라 문제 가 발생 합 니 다. nginx 는 사용자 의 실제 IP 주 소 를 어떻게 얻 습 니까? 백 엔 드 가 apache 라면 < apache 사용자 의 실제 IP 주소 가 져 오기 > 로 이동 하 십시오. 백 엔 드 실제 서버 가 nginx 라면.그럼 계속 내 려 다 봐.
인 스 턴 스 환경: 사용자 IP 120.22.11.11 CDN 전단 61.22.22 CDN 중계 121.207.33.33 회사 NGINX 전단 대리 192.168.50.121 (외부 네트워크 121.207.231.22)
1. CDN 사용자 정의 IP 헤드 로 가 져 오기
만약 당신 의 CDN 업 체 가 nginx 를 사용한다 면, nginx 에서 $remoteaddr 가 지정 한 머리 에 값 을 부여 합 니 다. 방법 은 다음 과 같 습 니 다.proxy_set_header remote-user-ip $remote_addr;
/ / 위 와 같이 백 엔 드 는 remoteuser_ip 의 http 머리, 어떤 사람들 은 잘못 골 랐 을 수도 있 습 니 다. 제 가 설정 한 머리 가 remote - user - ip 이 아니 라 고 했 습 니 다. 어떻게 remote 라 고 썼 습 니까?user_ip, 저자 가 잘못 쓴 것 아 닙 니까?
백 엔 드 nginx 역방향 에이전트 proxyset_헤더 사용자 정의 헤더 가 잘못 되 었 습 니 다. 코드 getRemoteUserIP. php<?php      $ip = getenv( "HTTP_REMOTE_USER_IP" );      echo $ip;    ?>
getRemoteUserIP. php 에 접근 한 결 과 는 다음 과 같 습 니 다.120.22.11.11 // IP, CDN ,
2 、 HTTPX_FORWARDED_FOR IP 주소 가 져 오기
일반적으로 CDN 서버 는 HTTP 를 전송 합 니 다.X_FORWARDED_FOR 헤드, 이것 은 ip 문자열 입 니 다. 백 엔 드 의 실제 서버 에서 HTTP 를 가 져 옵 니 다.X_FORWARDED_FOR 헤드, 문자열 의 첫 번 째 unown 이 아 닌 IP 를 사용자 의 실제 IP 주소 로 캡 처 합 니 다. 예 를 들 어:
120.22.11.11, 61.22.22, 121.207.33.33, 192.168.50.121 (사용자 IP, CDN 전단 IP, CDN 중계, 회사 NGINX 대리)
getFor.php <?php      $ip = getenv( "HTTP_X_FORWARDED_FOR" );      echo $ip; ?>
getFor. php 에 접근 한 결 과 는 다음 과 같 습 니 다.120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121
만약 당신 이 phop 프로그래머 라면, unknow 가 아 닌 첫 번 째 ip 주 소 를 가 져 옵 니 다. 여 기 는 120.22.11.11 입 니 다.
3. nginx 자체 모듈 realip 를 사용 하여 사용자 IP 주 소 를 가 져 와 nginx 를 설치 할 때 realip 모듈 을 추가 합 니 다. 제 인 자 는 다음 과 같 습 니 다../configure --prefix=/usr/ local /nginx-1.4.1 --with-http_realip_module
실제 서버 nginx 설정server {      listen       80;      server_name  www.ttlsa.com;      access_log  /data/logs/nginx/www.ttlsa.com.access.log  main;
       index index.php index.html index.html;      root /data/site/www.ttlsa.com;
       location /      {              root /data/site/www.ttlsa.com;      }      location = /getRealip.php      {              set_real_ip_from  192.168.50.0/24;              set_real_ip_from  61.22.22.22;              set_real_ip_from  121.207.33.33;              set_real_ip_from 127.0.0.1;              real_ip_header    X-Forwarded-For;              real_ip_recursive on;              fastcgi_pass  unix:/var/run/phpfpm.sock;              fastcgi_index index.php;              include fastcgi.conf;      } }
getRealip. php 내용<?php      $ip =  $_SERVER[ 'REMOTE_ADDR' ];      echo $ip;    ?>
www. ttlsa. com / getRealip. php 를 방문 하여 다음 을 되 돌려 줍 니 다.120.22.11.11
하면, 만약, 만약...ip_recursive on 또는 realip_recursive off www. ttlsa. com / getRealip. php 를 방문 하고 돌아 갑 니 다.121.207.33.33
불 행 히 도 중계 IP 를 얻 었 습 니 다. realip_recursive 의 효 과 는 알 겠 지?
set_real_ip_from: 실제 서버 의 이전 프 록 시 IP 주소 나 IP 세그먼트, 여러 줄 realip_header: 어느 header 헤드 에서 원 하 는 IP 주 소 를 검색 합 니까 realip_recursive: IP 주 소 를 재 귀적 으로 제거 하고 ip 문자열 은 오른쪽 에서 왼쪽으로 set 를 제거 합 니 다.real_ip_from 에 나타 난 IP 는 이 ip 세그먼트 가 나타 나 지 않 은 IP 가 나타 나 면 이 IP 는 사용자 의 IP 로 여 겨 집 니 다.예 를 들 어 제 예 를 들 어 실제 서버 에서 얻 은 IP 주소 문자열 은 다음 과 같 습 니 다. 120.22.11.11, 61.22.22, 121.207.33.33, 192.168.510.121 은 real 에 있 습 니 다.ip_recursive on 의 경우 61.22.22, 121.207.33.33, 192.168.50.121 이 set 에 나 타 났 다.real_ip_from 에서 120.22.11.11 만 나타 나 지 않 았 다 면 그 는 사용자 의 ip 주소 로 여 겨 지고 reote 에 할당 되 었 다.addr 변수
realip_recursive off 또는 설정 하지 않 은 상태 에서 192.168.50.121 이 set 에 나타 납 니 다.real_ip_from 에서 제외 하면 다음 ip 주 소 는 사용자 의 ip 주소 라 고 생각 합 니 다.
다음 설정 만 있 으 면:set_real_ip_from   192.168.50.0/24; set_real_ip_from 127.0.0.1; real_ip_header    X-Forwarded-For; real_ip_recursive on;
방문 결 과 는 다음 과 같 습 니 다.121.207.33.33
4. 세 가지 CDN 환경 에서 사용자 IP 를 얻 는 방법 은 4.1 CDN 사용자 정의 헤더 의 장점 을 요약 한다. 가장 진실 한 사용자 IP 주 소 를 얻 으 면 사용 자 는 IP 단점 을 위장 할 수 없다. CDN 업 체 가 제공 해 야 한다.
4.2 forward - for 헤드 장점 가 져 오기: 사용자 의 IP 주소 단점 을 가 져 올 수 있 습 니 다. 프로그램 이 변경 되 어야 하고 사용자 IP 가 위장 할 수 있 습 니 다.
4.3 realip 를 사용 하여 장점 얻 기: 프로그램 은 변경 할 필요 가 없 으 며, remote 를 직접 사용 합 니 다.addr 는 IP 주소 의 단점 을 가 져 올 수 있 습 니 다. ip 주 소 는 위 장 될 수 있 고 모든 CDN 노드 의 ip 주소 나 ip 세그먼트 를 알 아야 합 니 다.

좋은 웹페이지 즐겨찾기