sinanbekar/cf-restore-visitor-ip

Cloudflare 恢复原始访客 IP

dev-main 2021-06-07 18:25 UTC

This package is auto-updated.

Last update: 2024-09-08 01:32:35 UTC


README

PHP 中 Cloudflare 恢复原始访客 IP

有 mod_cloudflare(mod_remoteip)、nginx_realip 包,为什么还要使用这个?

mod_cloudflare 多年没有更新。Cloudflare 的 IP 范围可能会随时间变化(当前范围不同)。mod_cloudflare 只适用于 Apache 服务器。如果您使用共享主机(且服务器管理员未配置 Cloudflare 规则),通常无法更改核心配置。

如果您可以访问服务器配置文件且有配置经验,请先检查 mod_remoteip(Apache)、ngx_http_realip_module(NGINX)。恢复日志 IP 地址可能更好。

Cloudflare mod_remoteip 文章

Cloudflare ngx_http_realip_module 文章

注意事项和相关信息

无法检测客户端是否通过代理或 VPN 连接。基于 HTTP_CF_CONNECTING_IP,如果 Cloudflare 不活跃,可以防止欺骗。如果 Cloudflare 不活跃,则返回 REMOTE_ADDR。

警告:目前仅支持 IPv4

警告:由于上述原因不恢复日志 IP,因此不建议用于大型生产应用。

安装

Composer(推荐)

composer require sinanbekar/cf-restore-visitor-ip

使用

// Shorthand Usage:
$ipAddress = \SinanBekar\Cloudflare\Restore::getIp();

设置 IP 范围(如果没有变化则无需使用,可以使用缩写)

$ipRanges = ['173.245.48.0/20','103.21.244.0/22','103.22.200.0/22'...];
$cf = \SinanBekar\Cloudflare\Operations::getInstance();
$cf->setCfIpRanges($ipRanges);

$ipAddress = $cf->getClientIpAddress(); // Or \SinanBekar\Cloudflare\Restore::getIp();

其他方法

\SinanBekar\Cloudflare\Operations::getInstance()->getCfIpRanges(); // @return array

\SinanBekar\Cloudflare\Operations::getInstance()->isCorrectCfHeaders(); // @return bool

\SinanBekar\Cloudflare\Operations::getInstance()->isCloudflare(); // @return bool

\SinanBekar\Cloudflare\Helpers::isIpInRange($ip, $range); // @return bool

// Check function comments for more explanation

贡献

请随时贡献。