您的位置:首页 >文章内容

如何获得代理后的客户端真实IP地址呢?Nginx搞定

来源: 作者:admin 时间:2019-11-22 10:26:46
 ip代理

 1. Nginx设定恳求头主要参数

 location / {

 proxy_set_header X-Real-IP $remote_addr;

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 }

 2. 后端开发服务项目能够根据查寻该 HTTP 头来获得初始 IP 详细地址

 如:String realIp = request.getHeader(“X-Real-IP”);

 String forwardedIps = request.getHeader(“X-Forwarded-For”);

 $remote_addr

是nginx与手机客户端开展TCP联接全过程中,得到的手机客户端真正详细地址. Remote Address 没法仿冒,由于创建 TCP 联接必须三次握手,假如仿冒了源 IP,没法创建 TCP 联接,更不容易有后边的 HTTP 恳求

 X-Real-IP

是一个自定头。X-Real-Ip 一般 被 HTTP 代理用于表达与它造成 TCP 联接的机器设备 IP,这一机器设备将会是别的代理,也将会是真实的恳求端。必须留意的是,X-Real-Ip 现阶段并不是归属于一切标淮,代理和 Web 运用中间能够承诺用一切自定头来传送这一信息内容

 X-Forwarded-For

X-Forwarded-For 是一个拓展头。HTTP/1.1(RFC 2616)协议书并沒有对它的界定,它最初是由 Squid 这一缓存文件代理手机软件引进,用于表达 HTTP 恳求端真正 IP,如今早已变成实际上的标淮,被各大 HTTP 代理、负载均衡等分享服务项目普遍应用,并被刻录 RFC 7239(Forwarded HTTP Extension)标淮当中.

 X-Forwarded-For恳求头文件格式比较简单,就是这样:

 X-Forwarded-For:client, proxy1, proxy2

 能够看见,XFF 的內容由「英文逗号 + 空格符」分隔的好几个一部分构成,最初的是离服务器端比较远的机器设备 IP,随后是每一级代理机器设备的 IP。

 假如一个 HTTP 恳求抵达网络服务器以前,历经了三个代理 Proxy1、Proxy2、Proxy3,IP 各自为 IP1、IP2、IP3,客户真正 IP 为 IP0,那麼依照 XFF 标淮,服务器端最后会接到下列信息内容:

 X-Forwarded-For: IP0, IP1, IP2

 Proxy3 直连网络服务器,它会给 XFF 增加 IP2,表达这是在帮 Proxy2 分享恳求。目录中并沒有 IP3,IP3 能够在后端开发服务项目根据 $remote_address 字段名得到。人们了解 HTTP 联接根据 TCP 联接,$remote_address 来源于 TCP 联接,表达与服务器端创建 TCP 联接的机器设备 IP,在这一事例里就是说 IP3。