Nginx之获取客户端真实ip

Nginx之获取客户端真实ip

在使用Nginx作为Web服务器时,我们通常需要获取客户端的IP地址。但是,当Nginx作为反向代理服务器时,由于请求是从客户端到代理服务器再到Web服务器,获取客户端的真实IP地址可能会有困难。为了解决这个问题,nginx实现了3种获取客户端真实ip的方法。

1、 从TCP连接获取真实ip

Nginx会为每个请求创建一个结构体r,保存这个请求的上下文,而r包含一个connection结构体,保存了连接相关的信息,其中就包括了客户端的真实ip,因此nginx就可以采用此种方式获取客户端的真实ip。

2、X-Real-IP

当客户端向Nginx服务器发送HTTP请求时,代理模块会将请求转发到后端服务器,并在HTTP头部中添加X-Real-IP字段,该字段的值为客户端的真实IP地址。而在此种模式下,真实的客户端ip就要从请求的X-Real-IP获取。因为在多级代理下,从tcp获取到的ip是上一级代理的ip,并不是客户端真实ip。因此每级代理(包括最初始的客户端)都需要传递X-Real-IP头部。

3、X-Forwarded-For

X-Forwarded-For与X-Real-IP类似,也为HTTP头部,该头部包含了经过的所有代理服务器的IP地址。同样在多级代理下,每级代理(包括最初始的客户端)都需要传递X-Forwarded-For头部,并添加自身的ip .X-Forwarded-For头部的值由多个IP地址组成,以逗号分隔。例如,如果请求经过了三个代理服务器,则X-Forwarded-For头部的值为:

X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip

其中,client_ip代表客户端的真实IP地址,proxy1_ip和proxy2_ip分别代表两个中间代理服务器的IP地址。

后端服务器可以通过解析X-Real-IP和X-Forwarded-For头部来获取客户端的真实IP地址。通常情况下,后端服务器会优先使用X-Real-IP头部的值,如果该头部不存在,则会从X-Forwarded-For头部中获取客户端的IP地址。

转载请说明出处内容投诉
CSS教程_站长资源网 » Nginx之获取客户端真实ip

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买