nginx 역방향 대 리 를 사용 한 후 응용 프로그램 은 사용자 의 실제 ip 를 어떻게 가 져 옵 니까?

3054 단어
최근 애플 리 케 이 션 사 이 트 를 배치 한 서버 에 nginx 를 설치 해 클 라 이언 트 와 애플 리 케 이 션 서버 간 의 다리 로 삼 았 다.웹 애플 리 케 이 션 에 있어 서 이번 HTTP 가 요청 한 클 라 이언 트 는 실제 클 라 이언 트 브 라 우 저 가 아 닌 Nginx 입 니 다. 특별한 처 리 를 하지 않 으 면 웹 애플 리 케 이 션 은 Nginx 를 요청 한 클 라 이언 트 로 생각 하고 얻 은 클 라 이언 트 정 보 는 Nginx 의 일부 정보 입 니 다.
Ngnix 를 설정 해 야 합 니 다:
에이전트 의 모든 location 에 다음 설정 을 추가 합 니 다:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

1.  Host
클 라 이언 트 의 실제 도 메 인 이름과 포트 번 호 를 포함 합 니 다. 
2.  X-Forwarded-Proto
클 라 이언 트 의 실제 프로 토 콜 (http 또는 https) 을 표시 합 니 다. 
3.  X-Real-IP
클 라 이언 트 의 실제 IP 표시 하기; 
4.  X-Forwarded-For 이 Header 는 X-Real-IP 와 유사 하지만 다 중 프 록 시 에 실제 클 라 이언 트 와 중간 에 있 는 모든 프 록 시 서버 의 IP 를 포함 합 니 다.
예 를 들 면:  
\ # proxypass 와 fastcgipass 명령 에서 액 프 록 시 서버 를 사용 합 니 다. 기본 부하 균형 방식 은 폴 링 입 니 다.
  upstream tomcat_client {    server 127.0.0.1:8080;  }   #gzip 압축 을 켜 면 웹 페이지 를 방문 하면 자동 으로 압축 됩 니 다.  #gzip on;   #서버 이름과 인 자 를 지정 합 니 다.  server {    listen 80;    server_name http://;    location / {      proxy_pass http://tomcat_client;      proxy_redirect off;      #설정 에이전트      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;   proxy_set_header REMOTE-HOST $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   proxy_set_header X-Forwarded-Proto $scheme;    }  }
위의 설정 으로 바 뀌 었 지만 사용자 의 실제 ip 을 가 져 올 수 없습니다. tomcat 를 설정 해 야 해결 할 수 있 습 니 다.request.getHeader("X-Forwarded-For") 또는 request.getHeader("X-Real-IP") request.getRemoteAddr() ip。Tomcat 는 응용 서버 로 서 Tomcat 의 server. xml 파일 을 설정 하여 Host 요소 에 마지막 으로 추가 할 수 있 습 니 다.
<Valve className="org.apache.catalina.valves.RemoteIpValve" />

좋은 웹페이지 즐겨찾기