nginx 역방향 프록시를 통해서는 실제 IP를 얻을 수 없습니다. 실제 IP를 얻으려면 Nginx 구성 파일을 구성해야 합니다: nginx.conf
proxy_set_header X-Real - IP $remote_addr;
예:
######################################################################## #要转发地域名: upstream t.csdn.com { server 192.168.1.188:8080 max_fails=0 weight=1; #8080为tomcat端口 } ################################################################## server { listen 80; server_name t.csdn.com; access_log /data/wwwlogs/access_tomcat.log combined; root /usr/local/tomcat/webapps; index index.html index.jsp; #反向代理配置,将所有请求为http://hostname的请求全部转发到upstream中定义的目标服务器中。 location / { #此处配置的域名必须与upstream的域名一致,才能转发。 proxy_pass http://t.csdn.com; proxy_set_header X-Real-IP $remote_addr; } #启用nginx status 监听页面 location /nginxstatus { stub_status on; access_log on; } }
private static String getRemoteAddrIp(HttpServletRequest request) { String ipFromNginx = getHeader(request, "X-Real-IP"); log.info("ipFromNginx:" + ipFromNginx); log.info("getRemoteAddr:" + request.getRemoteAddr()); return StringUtils.isEmpty(ipFromNginx) ? request.getRemoteAddr() : ipFromNginx; } private static String getHeader(HttpServletRequest request, String headName) { String value = request.getHeader(headName); return (StringUtils.isNotBlank(value) && !"unknown" .equalsIgnoreCase(value)) ? value : ""; }마지막으로 getRemoteAddrIp 메서드를 호출하여 가져옵니다. IP :
String clientIp = getRemoteAddrIp(request); log.info("客户IP:" + clientIp);
위 내용은 Tomcat과 nginx 콘텐츠를 포함하여 Tomcat이 nginx 역방향 프록시를 통해 서버 IP 대신 실제 클라이언트 IP를 얻는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.