[Java] 获取客户端ip地址

13 篇文章 0 订阅
3 篇文章 0 订阅

在做日志模块的时候,需要知道访问客户端的ip地址。起初用了

request.getRemoteAddr();

当时是在本地测试,取到的地址都是127.0.0.1或者是0:0:0:0:0:0:0:1。都是本机地址,一个是ipv4一个是ipv6,没在意。后来部署到阿里云之后发现也是同样的问题。开始怀疑是不是方法写的有问题。于是又百度到了新的方法。

/***

* 获取客户端IP地址;这里通过了Nginx获取;X-Real-IP,

* @param request

* @return

*/

public static String getClientIP(HttpServletRequest request) {

String fromSource = "X-Real-IP";

String ip = request.getHeader("X-Real-IP");

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

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

fromSource = "X-Forwarded-For";

}

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

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

fromSource = "Proxy-Client-IP";

}

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

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

fromSource = "WL-Proxy-Client-IP";

}

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

ip = request.getRemoteAddr();

fromSource = "request.getRemoteAddr";

}

appLog.info("App Client IP: "+ip+", fromSource: "+fromSource);

return ip;

}

还是同样的结果。后来想到服务器配的是nginx + tomcat。nginx又是方向代理。监听80端口,映射本机tomcat的8080端口。在tomcat看来都是本地的80端口访问的,所以ip是localhost。于是在网上查找到了结果。nginx也需要配置几行,才能得到真实的ip地址。

location / {

proxy_pass http://127.0.0.1:8080/myweb/;

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

}

参考链接:

http://greatwqs.iteye.com/blog/1946982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值