同时使用CloudFlare和百度云加速多层CDN如何获取用户真实IP?

套了两层CDN,发现无法获取真实IP,研究了下,可以如下设置

一、单层CDN获取真实IP

单层CDN是通用的,在PHP打印了全局变量$_SERVER,其中有REMOTE_ADDR、HTTP_X_FORWARDED_FOR两个参数里存了IP

什么是remote_addr?

remote_addr表明客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,若是你用了某个代理,那么你的浏览器会先访问这个代理,而后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。

什么是x_forwarded_for?

正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了不这个状况,代理服务器一般会增长一个叫作x_forwarded_for的头信息,把链接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP。

此时只需要在NGINX配置文件中http部分增加如下内容即可

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;

二、增加CloudFlare多层CDN套娃获取真实IP

开启CloudFlare会在$_SERVER中增加一个新的参数,HTTP_CF_CONNECTING_IP,该参数中存了真实IP此时只需要调整real_ip_header即可

set_real_ip_from 0.0.0.0/0;
real_ip_header CF-Connecting-IP;

三、ngx_http_realip_module 模块有如下三个指令

1. set_real_ip_from

  • 该指令用于设置授信 IP,即请求过来时由某个头字段携带的 IP 中 nginx 自己认为可信的 IP,该头字段由 real_ip_header 指令指定;
  • 该指令值一般是前几层代理的 IP ;

2. real_ip_header

  • 该指令用于告知 nginx 从每个客户端请求中的哪个头字段来获取客户端真实的 IP;
  • 该指令默认值是 X-Real-IP,不过现在主流的都是通过 X-Forwarded-For 字段来获取客户端真实 IP,X-Forwarded-For 目前已经是主流运用的字段了;
  • 我们也可以在 nginx 配置时自定义一个新的字段;

3. real_ip_recursive

  • nginx 从 real_ip_header 指令指定的头字段中获取 IP,可能会有多个 IP 值;
  • 当 real_ip_recursive 指令值为 off,nginx 从获取到 IP 值中从右往左(也即从后往前)的顺序,以最后一个 IP 值作为客户端的真实 IP ,此时不会排除授信 IP;
  • 当 real_ip_recursive 指令值为 on,nginx 从获取到 IP 值中从右往左(也即从后往前)的顺序,排除 set_real_ip_from 指令指定的授信 IP,以最后一个非授信 IP 值作为客户端的真实 IP ;

本文作者:𝙕𝙆𝘾𝙊𝙄

文章名称:同时使用CloudFlare和百度云加速多层CDN如何获取用户真实IP?

文章链接:https://www.zkcoi.com/365up/program/2447.html

本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
𝙕𝙆𝘾𝙊𝙄𝙕𝙆𝘾𝙊𝙄
上一篇 2022年12月22日 下午8:42
下一篇 2022年12月26日 下午7:19

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

私聊博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

分享本页
返回顶部