nginx获取代理服务ip及客户端真实ip

在使用nginx作为反向代理时,通常request.getRemoteAddr()返回的是nginx的IP。要获取用户真实IP,需在nginx配置proxy_set_header X-Real-IP $remote_addr和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for。在Java后端,可以通过request.getHeader('X-Real-IP')或'X-Forwarded-For'获取。
摘要由CSDN通过智能技术生成

一、问题背景
  在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是当我们使用了nginx 作为反向代理后,使用 request.getRemoteAddr() 获取到的就一直是nginx 服务器的ip的地址,那这时应该怎么办?

首先,一个请求肯定是可以分为请求头和请求体的,而我们客户端的IP地址信息一般都是存储在请求头里的。如果你的服务器有用Nginx做负载均衡的话,你需要在你的location里面配置X-Real-IP和X-Forwarded-For请求头:

二、proxy_set_header 语法
  语法:

proxy_set_header field value;

允许重新定义或者添加发往后端服务器的请求头,value可以包含文本、变量或者它们的组合。当且仅当当前配置级别中没有定义proxy_set_header指令时,会从上面的级别继承配置。

在 java端,需要获取proxy_set_header的参数时,需要使用request.getHeader(field),一般用来获取真实ip地址。

总结:proxy_set_header 就是可设置请求头,并将头信息传递到服务器端。不属于请求头的参数中也需要传递时重定义下就行啦。

三、X-Real-IP
在《实战nginx》中,有这么一句话:

经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值