어떻게 remote 를 정확하게 설정 합 니까?addr 와 xforwarded_for

웹 사 이 트 를 만 들 때 remote_addrx_forwarded_for 두 개의 머리 정 보 를 사용 하여 클 라 이언 트 의 IP 를 얻 지만 역방향 에이전트 나 CDN 이 있 는 상황 에서 이 두 가지 값 은 정확 하지 않 기 때문에 설정 을 조정 해 야 한다.
리 모 트 가 뭐야addr
remote_addr 는 클 라 이언 트 의 IP 를 대표 합 니 다. 그러나 그 값 은 클 라 이언 트 가 제공 하 는 것 이 아니 라 서버 가 클 라 이언 트 의 ip 에 따라 지정 한 것 입 니 다. 브 라 우 저가 특정한 사 이 트 를 방문 할 때 중간 에 프 록 시가 없다 고 가정 하면 사이트 의 웹 서버 (Nginx, Apache 등) 는 reoteaddr 는 기계 IP 로 설정 합 니 다. 만약 당신 이 어떤 프 록 시 를 사용 했다 면, 브 라 우 저 는 먼저 이 프 록 시 를 방문 한 다음 에 이 프 록 시 에서 사이트 로 전송 합 니 다. 그러면 웹 서버 는 reoteaddr 는 이 프 록 시 기기 의 IP 로 설정 합 니 다.
무엇이 xforwarded_for
위 에서 말 한 바 와 같이 프 록 시 를 사 용 했 을 때 웹 서버 는 당신 의 실제 IP 를 모 릅 니 다. 이 상황 을 피하 기 위해 프 록 시 서버 는 보통 x 라 는 이름 을 추가 합 니 다.forwarded_for 의 헤드 정 보 는 클 라 이언 트 IP (즉, 인터넷 기기 IP) 를 이 헤드 정보 에 추가 하면 사이트 의 웹 서버 가 실제 IP 를 얻 을 수 있 도록 보장 할 수 있 습 니 다.
HAProxy 를 역 에이전트 로 사용 하기
일반적으로 웹 사 이 트 는 더 큰 방 문 량 을 지탱 하기 위해 많은 웹 서버 를 증가 시 키 고 이 서버 앞 에 역방향 프 록 시 (예 를 들 어 HAProxy) 를 추가 하면 부하 가 이 기계 에 고 르 게 분포 할 수 있다.브 라 우 저 에 접근 한 것 은 우선 이 역방향 프 록 시 입 니 다. 요청 을 뒤의 웹 서버 로 전송 하면 웹 서버 가 reoteaddr 는 이 역방향 에이전트 의 IP 로 설정 합 니 다. 프로그램 이 실제 클 라 이언 트 IP 를 가 져 올 수 있 도록 HAProxy 에 다음 설정 을 추가 해 야 합 니 다.
option forwardfor

그 역할 은 위 에서 말 한 것 처럼 x 를 추가 합 니 다.forwarded_for 의 머리 정보, 인터넷 기기 의 ip 를 추가 합 니 다.
Nginx 의 realip 모듈 사용 하기
Nginx 가 HAProxy 뒤에 있 을 때 remoteaddr 는 HAProxy 의 IP 로 설정 합 니 다. 이 값 은 무의미 합 니 다. nginx 의 realip 모듈 을 통 해 x 를 사용 할 수 있 습 니 다.forwarded_for 의 값.이 모듈 을 사용 하려 면 Nginx 를 다시 컴 파일 해 야 합 니 다. 인자 추가 --with-http_realip_module
set_real_ip_from   10.1.10.0/24;
real_ip_header     X-Forwarded-For;

위의 설정 은 10.1.10 이라는 네트워크 에서 온 요청 을 모두 X - Forward - for 의 머리 정 보 를 reote 로 사용 하 는 것 입 니 다.addr
Nginx 를 HAProxy 앞 에 놓 고 HTTPS 에이 전 트 를 합 니 다.
웹 사 이 트 는 보안 을 위해 보통 https 연결 로 민감 한 정 보 를 전송 하 는데 https 는 ssl 암호 화 를 사용 하기 때문에 HAProxy 가 직접 해석 할 수 없 기 때문에 HAProxy 앞 에 Nginx 를 설치 하여 복호화 한 다음 에 HAProxy 로 전송 하여 부하 균형 을 맞 춰 야 한다.이렇게 하면 웹 서버 앞 에 두 개의 에이전트 가 존재 합 니 다. 실제 클 라 이언 트 IP 를 얻 을 수 있 도록 다음 과 같은 설정 이 필요 합 니 다.
우선 Nginx 의 프 록 시 규칙 에 설정 을 해 야 합 니 다.
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

이렇게 하면 Nginx 의 https 에이 전 트 를 x 증가 시 킬 수 있 습 니 다.forwarded_for 헤드 정보, 고객 의 실제 IP 저장.
그 다음 에 HAProxy 설정 을 수정 합 니 다.
option     forwardfor except 10.1.10.0/24

이 설정 은 이전에 설정 한 것 과 차이 가 많 지 않 습 니 다. 단지 내부 네트워크 의 IP 세그먼트 가 하나 더 있 을 뿐 입 니 다. HAProxy 가 받 은 요청 이 내부 네트워크 에서 전 달 된 경우 (https 프 록 시 기기) 에는 x 를 설정 하지 않 습 니 다.forwarded_for 의 값 은 뒤의 웹 서버 가 받 은 것 이 바로 앞의 https 프 록 시 에서 보 내 온 것 임 을 보증 합 니 다.
왜 PHP 의 HTTPX_FORWARDED_FOR 랑 Nginx 는 달라 요.
웹 사이트 가 CDN 을 사용 하면 사용자 가 먼저 CDN 에 접근 하고 CDN 에 캐 시가 없 으 면 원본 사이트 (즉, 역방향 에이전트) 로 돌아 가 데 이 터 를 가 져 옵 니 다.CDN 은 원본 으로 돌아 갈 때 x 를 먼저 추가 합 니 다.forwarded_for 헤더 정 보 는 사용자 의 실제 IP 를 저장 하고 역방향 프 록 시 도 이 값 을 설정 합 니 다. 그러나 덮어 쓰 지 않 고 CDN 서버 의 IP (즉 현재 reote addr) 를 x 에 추가 합 니 다.forwarded_for 의 뒤에 이렇게 xforwarded_for 에 두 개의 값 이 존재 합 니 다.Nginx 는 이 값 의 첫 번 째, 즉 고객 의 실제 IP 를 사용 하고, PHP 는 두 번 째, 즉 CDN 의 주 소 를 사용 합 니 다.PHP 도 첫 번 째 값 을 사용 할 수 있 도록 다음 fastcgi 설정 을 추가 해 야 합 니 다.
fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;

nginx 가 사용 하 는 값 (즉 첫 번 째 IP) 을 PHP 에 전달 합 니 다. 그러면 PHP 가 받 은 xforwarded_for 에 서 는 사실 값 이 하나 밖 에 없어 서 두 번 째 CDN 의 IP 를 사용 하지 않 을 것 입 니 다.
무시 xforwarded_for
사실, Nginx 의 realip 모듈 을 사용 하면 remote 를 보장 합 니 다.addr 에서 설정 한 것 은 클 라 이언 트 의 실제 IP 입 니 다. 이 설정 을 보십시오.
set_real_ip_from   10.1.10.0/24;
real_ip_header     X-Forwarded-For;

바로 xforwarded_for remote 로 설정addr, nginx 의 xforwarded_for 에서 얻 은 것 이 그 중의 첫 번 째 IP 입 니 다.
이 설정 을 사용 하면 당신 의 remote 를 보장 할 수 있 습 니 다.addr 에서 설정 한 것 은 클 라 이언 트 의 실제 IP 이 고 xforwarded_for 는 무시 할 수 있 습 니 다:)

좋은 웹페이지 즐겨찾기