如何获得代理后的客户端真实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。