首页 >后端开发 >php教程 >通过nginx反向代理,Tomcat获取真实的客户端IP而非服务器IP nginx tomcat 慢 nginx代理tomcat nginx tomcat 40

通过nginx反向代理,Tomcat获取真实的客户端IP而非服务器IP nginx tomcat 慢 nginx代理tomcat nginx tomcat 40

WBOY
WBOY原创
2016-07-29 08:49:451271浏览

通过nginx反向代理,就获取不到真实ip,是获取的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;

        }


        }

然后Tomcat 的获取方式:  java

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);


以上就介绍了通过nginx反向代理,Tomcat获取真实的客户端IP而非服务器IP,包括了tomcat,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn