Java获取不到请求的真实IP
2024-10-12 00:33:54
问题
最近在写博客浏览量的时候,设计了这么一个逻辑:同一个IP浏览一遍文章,5分钟内不刷新次数。就需要在服务器端得到用户的真实IP,我代码是这样写的(从网上找的方法):
public static String getRealIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
String unknown = "unknown";
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();
}
return ip;
}
发现得到的IP总172开头的IP,我查了下是本地局域网的IP,我的项目又是docker布署的,这又记我联想到docker内部的IP。。。
解决办法
最后才发现nginx代理接口的时候,需要做获取IP的配置
location ^~ /api {
proxy_pass http://127.0.0.1:8110/;
proxy_read_timeout 90;
#得到请求真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect default;
}
加上面面的配置,问题解决!
最新文章
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
- android.app.Activity阅读摘要,有时候会不会需要保持一些现场数据呢? 想让系统帮你退出到后台或者挂掉前做些前置保持工作吗,重点参考吧:
- Rust的几个预测
- 【C】——幻方算法
- Oracle truncate和delete的区别
- javascript笔记3之数据类型
- array模块
- zepto API参考(~~比较全面)
- [WPF]不规则窗体的实现
- [RM 状态机详解1] RMApp状态机详解
- CSS3之Border-radius
- HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等
- c# 设置IE浏览器版本运行程序-设置webBrowser对应的IE内核版本来运行
- Python面向对象编程(下)
- Pytorch 基础
- JS---函数名和变量名重名
- android多设备界面适配的利器:属性weight的妙用
- 在Windows上弄一个redis的docker容器
- Some Parameter Interpretation On Using Mininet
- Css的向左浮动、先右浮动、绝对定位、相对定位的简单使用
热门文章
- 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
- 我画着图,FluentAPI 她自己就生成了
- C++如何实现多态
- UNP——第三章,套接字编程介绍
- Python学习笔记5:模块/包
- Python_爬虫伪装_ scrapy中fake_userAgent的使用
- Python 自定义模块位置
- Avoided redundant navigation to current location: ";/users";
- window.frames[";id";].location使用
- 8、Spring Boot任务