Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Nginx反向代理后获取用户真实IP地址

Nginx反向代理后获取用户真实IP地址

原创
作者头像
Reset
发布于 2022-12-19 14:56:38
发布于 2022-12-19 14:56:38
1.6K0
举报
文章被收录于专栏:ResetReset
问题描述:nginx集群后无法获取用户真实的IP地址,得到的一直都是前端代理服务器。Nginx的地址有2台Nginx服务器,1台代理nacos集群,一台代理vue前端项目。在登录前端页面时一直无法获取到真实的用户IP地址,获取到的是代理前端服务器的地址

解决方法:

代码语言:shell
AI代码解释
复制
在代理的后端地址中加上如下代码:
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

完整代码:

代码语言:txt
AI代码解释
复制
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地址:
代码语言:java
AI代码解释
复制
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;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nginx反向代理获取客户端的真实IP和域名
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中。
用户7639835
2021/08/28
4.6K0
nginx代理tomcat不能获取真实ip地址解决方法
本文介绍了nginx服务器代理tomcat系统时,不能获取真实ip地址的解决办法,有需要的朋友参考下。
拓荒者
2019/03/11
1.9K0
springcloud获取nginx反向代理后浏览器的真实ip
第一步:在nginx的location中添加如下配置: location / {             proxy_pass   http://127.0.0.1:9999;             proxy_connect_timeout 180;             proxy_send_timeout 180;             proxy_read_timeout 180;             proxy_set_header Host $host:$server_port;  
似水的流年
2020/02/17
2.3K0
客户端IP获取
从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。
码客说
2021/02/25
4.6K0
nginx转发后后端怎么获取用户真实IP
经常有需求要获取访问用户的IP,在经过nginx转发后真实IP就被隐藏起来了,我们需要在头部信息里拿真实IP,下面是拿IP的代码,考虑了各种情况。 public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-real-ip"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreC
猿天地
2018/04/03
4.5K0
Nginx反向代理后如何获取客户端真实IP
获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过Nginx反向代理后就不能获取到客户端的真实IP地址了。如果使用了反向代理,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
Cheng_Blog
2022/02/25
1.9K0
Java服务器获取客户端的真实IP
首先,一个请求肯定是可以分为请求头和请求体的,而我们客户端的IP地址信息一般都是存储在请求头里的。如果你的服务器有用Nginx做负载均衡的话,你需要在你的location里面配置 X-Real-IP和 X-Forwarded-For请求头:
健程之道
2019/11/03
4.9K0
【Nginx】如何获取客户端真实IP、域名、协议、端口?看这一篇就够了!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
5.5K0
手把手教你用Java获取IP归属地
前几个月微信公众号上线了IP归属地的功能,后续知乎、抖音等平台纷纷添加了该功能。如果是国内的用户精确到省份,国外用户精确到国家。本文就使用Java实现获取IP归属地。
用户10384376
2023/02/26
2.3K0
手把手教你用Java获取IP归属地
Nginx反向代理及获取真实的客户端IP地址
在构建网络应用时,很常见的一种场景是使用反向代理服务器,例如 Nginx。反向代理可以提供负载均衡、安全保护、缓存等多种功能,因此在现代 web 开发中扮演着非常重要的角色。然而,使用反向代理的同时,也引入了一个新的问题:如何获取到真实的客户端 IP 地址?
高久峰
2023/09/28
11.9K1
Nginx之反向代理
很多场景下,不得不承认Nginx是个好东西,它给我们的跨系统间的访问、安全性方面等等,带来了极大的便利,况且它的性能也极高。
xcbeyond
2020/04/01
8800
哎,我早就料到你获取IP地址的姿势不对啦!
来源:https://blog.csdn.net/takeurhand/article/details/52512200
用户5224393
2019/10/10
3.3K2
Tomcat捕获Nginx反向代理协议IP及端口配置
最近的技术调整,需要获取Nginx端请求方式是http还是https。我们当前的架构属于典型的互联网架构,Nginx+Tomcat+Mysql,启用了反向代理。当前并没有启用全站https,因此客户端发出的请求基于模块的方式使用http或者https协议。关于捕获这个请求的协议,我们需要使用到Nginx ngx_http_proxy_module这个模块中的proxy_set_header指令来进行配置。本文描述通过这个命令来实现捕获请求协议。
Leshami
2018/08/06
1.7K0
nginx反向代理后应用程序如何获取客户端真实IP?
Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端浏览器地址栏上的真实域名、协议、端口。
拓荒者
2019/03/15
2.6K0
SpringBoot根据IP地址获取归属地并绕过Nginx
现在,各大平台都新增了评论区显示发言者ip归属地的功能,例如哔哩哔哩,微博,知乎等等。本文主要讲解Java中是如何获取ip属地的。
Jensen_97
2023/07/20
1.1K0
SpringBoot根据IP地址获取归属地并绕过Nginx
Java 实战系列·获取请求 IP 地址
在 Spring 中,获取客户端真实 IP 地址的方法是 request.getRemoteAddr(),这种方法在大部分情况下都是有效的,但是在通过了 Squid 等反向代理软件就无法工作。
数媒派
2022/12/01
10.8K0
nginx反向代理中proxy_set_header 运维笔记
Nginx proxy_set_header:即允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。在没有定义proxy_set_header时会继承之前定义的值。默认情况下,只有两个字段被重定义: proxy_set_header Host $proxy_host; proxy_set_header Connection close; 如果启用缓存,来自之前请求的头字段“If-Modified-Since”, “If-Unmodified-Since”, “If-None-
洗尽了浮华
2018/01/23
18.6K0
nginx反向代理中proxy_set_header 运维笔记
如何取得nginx做反向代理时的真实IP?
对于client -> nginx reverse proxy -> apache,
一见
2018/08/02
3.2K0
在SpringCloud中如何获取用户真实IP(避免各种问题)
用户10136162
2024/03/16
1.3K0
Nginx反向代理配置
反向代理(reverse proxy)是指用代理服务器来接受外部的访问请求,然后将请求转发给内网的上游服务器,并将从上游服务器上得到的结果返回外部客户端。作为反向代理是 Nginx 的一种常见用法。
mazhen
2023/11/24
1.8K0
Nginx反向代理配置
推荐阅读
相关推荐
nginx反向代理获取客户端的真实IP和域名
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文