NGINX,PHP获取Cloudflare传递的真实访客IP 配合宝塔面板防御CC攻击 防伪造IP 日志记

from: https://www.bnxb.com/php/27592.html

Cloudflare获取访客真实IP,获取cf传递的真实访客ip,再结合我们的cdn.bnxb.com的批量提交IP给CF的防火墙的功能,可以实现抵御CC攻击的功能,将CC攻击者的连接IP给封杀在CDN阶段,就到不了我们服务器,消耗不了我们的服务器资源

那怎么获取CC攻击者的真实IP信息呢(也就是这些CC攻击者连接到CF CDN的IP),其实很简单,CF有将通过他们的CDN访问你网站的访客的真实IP通过HEADER发送到你服务器来,标头是HTTP_CF_CONNECTING_IP

NGINX,PHP获取Cloudflare发送的真实访客IP 可用于防御CC攻击 防伪造IP 日志记录真实IP 显示访客真实IP

先看看我们通过PHP 得到的CF返回来的HEADER信息

 

<span style="color:#333333"><?php
print_r($_SERVER); 
?></span>

读取到结果如下:

 

<span style="color:#333333">Array
(
    [USER] => www
    [HOME] => /home/www
    [HTTP_CF_CONNECTING_IP] => 122.114.6.211
    [HTTP_COOKIE] => __cfduid=*****; PHPSESSID=******; PHPSESSID=*****; Hm_lvt_***=****; Hm_lpvt_*****=1536121476
    [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
    [HTTP_CF_VISITOR] => {"scheme":"https"}
    [HTTP_X_FORWARDED_PROTO] => https
    [HTTP_CF_RAY] => 455d1c72ed0e963d-SJC
    [HTTP_X_FORWARDED_FOR] => 122.114.6.211
    [HTTP_CF_IPCOUNTRY] => CN
    [HTTP_ACCEPT_ENCODING] => gzip
    [HTTP_CONNECTION] => Keep-Alive
    [HTTP_HOST] => cdn.bnxb.com
    [PATH_INFO] => 
    [REDIRECT_STATUS] => 200
    [SERVER_NAME] => cdn.bnxb.com
    [SERVER_PORT] => 443
    [SERVER_ADDR] => *
    [REMOTE_PORT] => 12554
    [REMOTE_ADDR] => 172.68.132.93
    [SERVER_SOFTWARE] => nginx/1.14.0
    [GATEWAY_INTERFACE] => CGI/1.1
    [HTTPS] => on
    [REQUEST_SCHEME] => https
    [SERVER_PROTOCOL] => HTTP/1.1
    [DOCUMENT_ROOT] => /
    [DOCUMENT_URI] => /ip.php
    [REQUEST_URI] => /ip.php
    [SCRIPT_NAME] => /ip.php
    [CONTENT_LENGTH] => 
    [CONTENT_TYPE] => 
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [SCRIPT_FILENAME] => /ip.php
    [FCGI_ROLE] => RESPONDER
    [PHP_SELF] => /ip.php
    [REQUEST_TIME_FLOAT] => 1536196806.1434
    [REQUEST_TIME] => 1536196806
)</span>

 

其中HTTP_CF_CONNECTING_IP标头就是我们要的访客真实IP信息了。

接下来说一下NGINX和PHP分别如何获取这个IP

 

 


 

 

1、NGINX配置获取CloudFlare 下的访客真实IP并记录到日志

需要修改NGINX的配置文件

 

宝塔的nginx配置文件存放位置与一般nginx不一样,宝塔存放nginx配置文件位置:/www/server/nginx/conf/nginx.conf;一般nginx的配置文件位置:/usr/local/nginx/conf/nginx.conf。

 

http

    {

}

部分增加

 

<span style="color:#333333">map $HTTP_CF_CONNECTING_IP  $clientRealIp {
    ""    $remote_addr;
    ~^(?P<firstAddr>[0-9.]+),?.*$    $firstAddr;
}
log_format  main  '$clientRealIp [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '$http_user_agent $remote_addr $request_time';</span>

主要是为了通用性,如果关闭了CDN,可以不需要修改获取IP的方式,所以才这么修改,不然直接用$HTTP_CF_CONNECTING_IP就行了(这个时候就不需要在日志格式里使用$clientRealIp)

然后在网站记录的日志定义使用main这个日志格式

比如

access_log  /www/wwwlogs/www.bnxb.com.log main;

可以参考https://www.bnxb.com/nginx/27513.html

 

2、PHP获取使用CloudFlare CDN环境下的访客真实IP

 

<?php
$realip =$_SERVER['HTTP_CF_CONNECTING_IP']; 
echo $realip;
//也可以用下面这个
$clientIP = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR'];
echo $clientIP;
?>

 

以上就是获取Cloudflare环境下真实IP功能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值