nginx 세 가지 사용자 의 실제 ip 를 얻 는 방법
인 스 턴 스 환경: 사용자 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 세그먼트 를 알 아야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.