文档章节

使用Nginx代理通过HttpServletRequest获取用户IP地址

郏高阳
 郏高阳
发布于 2016/09/23 14:44
字数 207
阅读 109
收藏 3

在开发的时候很多时候都需要获取用户IP地址,但是又有很多项目前后端分离,使用了Nginx代理……获取不到用户真实IP

首先Nginx配置:

server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root D:\Project\website\src\main\webapp\website;
			
            index  index.html index.htm;
        }
		
		location ~ .*/api/* {
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass   http://127.0.0.1:8080;
		}
    }

很简单的配置大家应该懂得,只用加如下代码即可:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

JAVA代码:

public static String getIp(HttpServletRequest request) throws Exception{
        String ip = request.getHeader("X-Real-IP");
        if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
        ip = request.getHeader("X-Forwarded-For");
        if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
            // 多次反向代理后会有多个IP值,第一个为真实IP。
            int index = ip.indexOf(',');
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        } else {
            return request.getRemoteAddr();
        }
    }

 

© 著作权归作者所有

郏高阳

郏高阳

粉丝 99
博文 153
码字总数 112268
作品 1
黄浦
程序员
私信 提问
获取用户的真实ip

常见的坑有两个: 一、获取的是内网的ip地址。在nginx作为反向代理层的架构中,转发请求到php,java等应用容器上。结果php获取的是nginx代理服务器的ip,表现为一个内网的地址。php获取REMOT...

蜗牛奔跑
2016/03/08
41
0
用Java来获取访问者真实的IP地址(反向代理)

在jsp里,获取客户端的ip地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了...

吕坤
2013/02/18
0
0
关于httpservletrequest的获取真实的ip

request方法客户端IP: request.getRemoteAddr() 输出:192.168.0.106 客户端主机名:request.getRemoteHost()输出:abc request.getHeader("Host") 输出:192.168.0.1:8080 Web服务器名字:......

小老傅
2014/08/08
0
4
servlet request getHeader("x-forwarded-for") 获...

request方法客户端IP: request.getRemoteAddr() 输出:192.168.0.106 客户端主机名:request.getRemoteHost()输出:abc request.getHeader("Host") 输出:192.168.0.1:8080 Web服务器名字:......

黑帽子
2013/07/23
0
0
nginx反向代理获取用户真实ip

nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用获取到的是nginx的ip地址,而不是用户的真实ip. 修改nginx配置,如下: 在原来...

yysue
2018/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

九、RabbitMQ的集群安装

概述 理解RabbitMQ的集群原理可能需要花点功夫,但是配置RabbitMQ的集群则非常容易。 注意 如果有防火墙,请提前开放相关端口: client端通信口5672 管理口15672 server间内部通信口25672 e...

XuePeng77
11分钟前
0
0
今天的学习

今天学到了用ci框架向数据库添加数据,代码是这样的: $picture = $this->input->post('picture');$price = $this->input->post('price');$name = $this->input->post('name');$standa......

墨冥
19分钟前
0
0
Java agentlib参数分析

Java agentlib参数分析 再用intellij idea进行远程调试的时候,具体的配置选项如下: 标红的一行显示了远程调试需要添加的虚拟机参数。这个参数到底有什么意义? 我在命令行输入java命令,输...

Mr_Tea伯奕
36分钟前
2
0
四种软件架构演进史,程序员会一种就很牛了!

如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面。 ...

我最喜欢三大框架
41分钟前
3
0
如何做高可用的架构设计?

定义目标 既然我们的目标是做到高可用,那么我们就有必要先明确清楚高可用的含义,并通过拆解目标,让目标可以被量化。按照我的理解,可以将目标按照以下三条进行拆解: 1. 保持业务高稳定性...

别打我会飞
41分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部