使用nginx后程序获取来源ip的方法

首先nginx的配置需要开启传递来源ip,

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

重要的是第二行,$remote_addr.

可配置在server中,也可单独配置在某个程序中,

如:

location /cpcn/ {

proxy_pass http:`//localhost:8082;`

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

或者写在server中

server {

listen 8080`;`

server_name localhost;

port_in_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

IPUtil工具类:

package test;

import javax.servlet.http.HttpServletRequest;

public class IPUtil {

public static String getIpAddr(HttpServletRequest request) {

String ip = request.getHeader("X-Forwarded-For");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("WL-Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("HTTP\_CLIENT\_IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("HTTP\_X\_FORWARDED_FOR");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getRemoteAddr();

}

System.out.println("IP:"+ip);

return ip;

}

}

附录:

通过UC访问得到的头信息内容

-----------------------------------------------------

host:xabc.yf2017.top:8080

x-real-ip:123.150.182.23

x-forwarded-for:124.205.118.114, 123.150.182.23

connection:close

accept-encoding:gzip

accept-language:zh-CN

accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8,UC/145,plugin/1,alipay/en

x-ucbrowser-ua:dv(MI 4W);pr(UCBrowser/10.10.8.822);ov(Android 6.0.1);ss(360*640);pi(1080*1920);bt(UC);pm(1);bv(1);nm(0);im(0);sr(0);nt(2);

user-agent:Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; MI 4W Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.10.8.822 U3/0.8.0 Mobile Safari/534.30

clientip:124.205.118.114

cookie:_ga=GA1.2.136101778.1465853445; BAEID=4FD76B483B836FF0D12725A4737251BB; JSESSIONID=FBCCB146EADCD62C8CE0AEEDEA3C447A

cache-control:max-age=0

-----------------------------------------------------

IP:124.205.118.114, 123.150.182.23

所以最好再加上是否包含逗号的判断,如果包含逗号,取第一个值。

0%