Nginx反向代理后获取用户真实IP地址
2023-06-13 09:16:00 时间
问题描述:nginx集群后无法获取用户真实的IP地址,得到的一直都是前端代理服务器。Nginx的地址有2台Nginx服务器,1台代理nacos集群,一台代理vue前端项目。在登录前端页面时一直无法获取到真实的用户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;
完整代码:
location /api/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xxxxxxx:8080/; //代理的后端接口地址
}
java获取IP地址:
public String getRequestIp(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();
}
return ip;
}
相关文章
- CGLIB代理使用与原理详解
- nginx配置反向代理
- Nginx正向代理、反向代理、负载均衡
- 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少
- Nginx配置转发_linux端口转发代理
- nginx反向代理和正向代理的区别是什么_nginx负载均衡的三种方式
- 如何使用Nginx 部署项目?什么是反向代理?
- 设计模式 | 结构型 | 代理模式
- 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )
- 介绍几个socks5代理IP工具
- 搭建的vscode 服务使用nginx代理后不能访问详解程序员
- Centos下yum安装Nginx报错 No package nginx available.详解程序员
- nginx 反向代理和负载均衡详解程序员
- Linux下重启Nginx服务器(linux重启nginx)
- Linux 上手设置网络代理指南(linux设置上网代理)
- 如何验证爬虫代理IP
- Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)
- Nginx网站架构实战——15、nginx实现负载均衡
- 基于代理的Redis架构实践(代理 redis)
- Oracle会员与代理面对未来的紧密合作(oracle会员与代理)
- Oracle代理程序高效助力IT管理(oracle代理程序)
- Oracle RPC代理一种更高效的数据传输方式(oracle rpc代理)
- Nginx作为反向代理时传递客户端IP的设置方法