首頁 >後端開發 >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:451252瀏覽

透過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