Hi!请登陆

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

2023-3-2 369 3/2

Cloudflare 作为可靠性及高,又成本最低的CDN和防护方案,深受各大中小站长的喜爱。包括著名的域名注册商 Namesilo 在内的很多网站,都选择了Cloudflare 作为CDN。

相信当你看到本文的时候,也已经使用上Cloudflare 的服务。因为Cloudflare 提供了免费的订阅,足够个人小站使用了。

一、Cloudflare 的CDN 常规使用

当你的网站接入Cloudflare 的CDN,并在Cloudflare的后台点开小云朵(代理状态 改为 已代理)生效之后。

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

这个时候你会发现,通过站长工具 Ping 你的网址。响应的IP地址为Cloudflare的IP地址。

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

也就是说访客通过浏览器访问您的网址,会首先到达Cloudflare的CDN服务器,再经过 Cloudflare 的中转抵达你的源站。如下图所示:

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

在没有进行额外设置的情况下,访客的IP地址是不会正确的体现在你的真实源服务器上的。
尝试用你自己的浏览器访问你自己的网址,然后查看宝塔面板的 【站点设置】【响应日志】

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

可以通过【响应日志】看到,你源服务器得到的访客IP并不是你真实的IP,通过查询此IP可以得知。这个IP地址是Cloudflare的CDN服务器IP地址。

简单总结一下就是,当你启用了Cloudflare的CDN之后。你源站收到的请求全部都是Cloudflare的CDN地址。

虽然,这并不会影响客户的正常访问。但在以下这种情况下是会出现问题的。

例:源服务器开启了防CC或者WAF策略

也不知道为什么,互联网上总有隐藏在背后。不断对你站点进行攻击的人。尽管小站流量不大,也没有影响任何人的利益。却总是有人没日没夜的对你的网址、服务器进行扫描、嗅探、攻击。

在你开启Cloudflare 的CDN之后,如果设置得当。针对服务器的DDos攻击可能会因为隐藏掉原始IP使得攻击者无法下手。但攻击者的手段多到你无法想象。比方说攻击者使用 CC 的手段对你的网站地址进行攻击的时候。往往会采用大量的代理IP,模拟正常访问。让你的源服务器超过其负载能力导致宕机。比方说大量的请求导致CPU、内存超载。或者源服务器宽带超载。

往往网站运营者,会采用在源站配置防CC策略。来屏蔽攻击者的IP。

但如果你已经开启了Cloudflare的CDN,那么你的源服务器屏蔽的并不是真实的访客IP。反而屏蔽的是Cloudflare的CDN服务器节点IP,那么这个时候就会导致大量的Cloudflare服务器无法正常访问到你的源服务器。即使针对Cloudflare CC攻击的量并没有超过服务器的负载。那么正常的访客也会无法访问你的网站。

所以如何让源服务器获取到访客真实的访问IP就显得尤为重要了。

二、设置源服务器的Nginx使源服务器获取访客真实IP

这里示例中,我们的Web服务采用Nginx

接下来我们只需修改nginx.conf配置文件,并在下图位置插入如下两段代码。并点击保存。

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

 

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

经过以上修改,我们宝塔源服务器就可以获取到访客的真实IP了。

WordPress 设置

在套用了Cloudflare的CDN后,wordpress后台统计软件显示的ip也变成CDN的地址,通过以下设置可以显示真实访客ip。

  1. 进入到wordpress网站根目录下(非主题目录),找到wp-config.php
  2. 在如下位置中加入几行代码即可。
使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等
//绕过 CDN 代理IP获取客户真实IP地址
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}

 

如果你用的是Lnmp,那么需要先安装:ngx_http_realip_module 组件

 

  1. 进入到 lnmp 安装目录 ,然后编辑 lnmp.conf 在 Nginx_Modules_Options 引号内加入 --with-http_realip_module
Nginx_Modules_Options='--with-http_realip_module'
PHP_Modules_Options=''
 
##MySQL/MariaDB database directory##
MySQL_Data_Dir='/usr/local/mysql/var'
MariaDB_Data_Dir='/usr/local/mariadb/var'
##Default website home directory##
Default_Website_Dir='/home/wwwroot/default'
 
Enable_Nginx_Openssl='y'
Enable_PHP_Fileinfo='n'
Enable_Nginx_Lua='n'
Enable_Swap='y'

然后执行

 

./upgrade.sh nginx

注意此处,因为必须要选择 Nginx 的升级版本,如果你不想升级的话,就输入当前安装的 nginx 的版本就可以了

查询当前 Nginx 版本

nginx -V
因为是平滑升级,所以升级过程不影响网站访问,也无需重启 Nginx

升级后查看得知模块已安装

然后我们开始对 Nginx 编辑 ngin.conf 配置以获取用户真实 IP

在配置server的地方

location / {
set_real_ip_from IP_address; //IP_address填写自己的负载均衡ip
real_ip_header X-Forwarded-For;
}

比如像这样:

#Cloudflare CDN 获取真实IP配置文件,需要ngx_http_realip_module模块,ip更新信息https://www.cloudflare.com/ips/    
set_real_ip_from 103.21.244.0/22;set_real_ip_from 103.22.200.0/22;set_real_ip_from 103.31.4.0/22;set_real_ip_from 104.16.0.0/12;set_real_ip_from 108.162.192.0/18;set_real_ip_from 131.0.72.0/22;set_real_ip_from 141.101.64.0/18;set_real_ip_from 162.158.0.0/15;set_real_ip_from 172.64.0.0/13;set_real_ip_from 173.245.48.0/20;set_real_ip_from 188.114.96.0/20;set_real_ip_from 190.93.240.0/20;set_real_ip_from 197.234.240.0/22;set_real_ip_from 198.41.128.0/17;set_real_ip_from 2400:cb00::/32;set_real_ip_from 2606:4700::/32;set_real_ip_from 2803:f800::/32;set_real_ip_from 2405:b500::/32;set_real_ip_from 2405:8100::/32;set_real_ip_from 2c0f:f248::/32;set_real_ip_from 2a06:98c0::/29;
real_ip_header  X-Forwarded-For;
real_ip_recursive on;

使用Cloudflare 如何显示真实访客的ip地址,适合Lnmp、宝塔等

当然更多最新的设置方法请看Cloudflare官方的公告:https://support.cloudflare.com/hc/zh-cn/articles/200170786-%E6%81%A2%E5%A4%8D%E5%8E%9F%E5%A7%8B%E8%AE%BF%E9%97%AE%E8%80%85-IP

相关推荐