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

当使用nginx作为反向代理时,服务器无法直接获取客户端IP。本文介绍了如何通过`proxy_set_header`配置nginx,设置`X-Real-IP`和`X-Forwarded-For`头来传递客户端IP,以便在后端服务中获取真实IP。同时,讲解了`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地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值