nginx代理后获取用户真实ip

在使用nginx作为反向代理时,web服务器无法直接获取到客户端的真实IP。nginx的$remote_addr变量会返回代理服务器的IP。为了解决这个问题,可以在nginx配置中使用proxy_set_header指令,将$remote_addr赋值给X-real-ip头,然后在web端通过request.getAttribute('X-real-ip')来获取用户的真实IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址”。这句话的意思是说,当你使用了nginx反向服务器后,在web端使用request.getRemoteAddr()(本质上就是获取$remote_addr)

nginx使用$remote_addr变量时获得的是用户的真实ip,如果我们想要在web端获得用户的真实ip,就必须在nginx这里作一个赋值操作,如下:
proxy_set_header            X-real-ip $remote_addr;
其中这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:
request.getAttribute("X-real-ip")

在nginx的配置文件的location加下面的配置

proxy_set_header            Host $host;
proxy_set_header            X-real-ip $remote_addr;
proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

java代码

public String getIp(HttpServletRequest request) throws Exception {
        String ip = request.getHeader("X-Forwarded-For");
        if (ip != null) {
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值