如何使用 PHP 获取 CDN(内容分发网络)请求的真实 IP 地址175


内容分发网络 (CDN) 在通过位于全球各地的服务器网络提供内容方面发挥着至关重要的作用,从而提高网站和应用程序的性能和可用性。然而,由于 CDN 服务器充当代理,直接获取客户端的真实 IP 地址变得具有挑战性。

对于需要准确跟踪用户位置或过滤基于 IP 的请求等应用程序来说,获取真实 IP 地址至关重要。PHP 提供了多种机制来获取 CDN(内容分发网络)请求的真实 IP 地址,本文将探讨这些机制及其优缺点。

通过 HTTP 标头获取真实 IP 地址

CDN 通常使用 HTTP 标头将真实 IP 地址传递给源服务器。PHP 提供了以下标头可以用来获取真实 IP 地址:
X-Forwarded-For
X-Real-IP
CF-Connecting-IP (用于 Cloudflare CDN)

这些标头中包含的 IP 地址通常是客户端的真实 IP 地址,但需要注意的是,某些 CDN 和代理可能会修改或删除这些标头。因此,建议同时使用多个标头以提高准确性。
<?php
$realIp = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['CF-CONNECTING-IP'] ?? $_SERVER['REMOTE_ADDR'];
echo $realIp;
?>

通过 Cloudflare API 获取真实 IP 地址

如果您使用 Cloudflare CDN,可以使用 Cloudflare API 来获取真实 IP 地址。Cloudflare 提供了一个名为 的特殊对象,其中包含有关请求的各种信息,包括客户端的真实 IP 地址。

要获取 Cloudflare 请求对象,需要在 PHP 脚本中设置 Cloudflare API 密钥。以下代码演示了如何使用 Cloudflare API 获取真实 IP 地址:
<?php
require 'vendor/';
use Cloudflare\API\Auth\APIKey;
use Cloudflare\API\Endpoints\Zone;
$apiKey = 'YOUR_API_KEY';
$zoneId = 'YOUR_ZONE_ID';
$email = 'YOUR_EMAIL_ADDRESS';
$auth = new APIKey($email, $apiKey);
$zone = new Zone($auth);
$zoneInfo = $zone->get($zoneId);
$realIp = $zoneInfo->get('settings')->get('ip_geolocation');
echo $realIp;
?>

通过 IP 溯源库获取真实 IP 地址

IP 溯源库(例如 MaxMind GeoIP)提供了将 IP 地址映射到地理位置信息的数据库。通过将 CDN 请求的 IP 地址与 IP 溯源库进行比较,可以获取客户端的真实 IP 地址。

PHP 中有许多支持 IP 溯源库的库。以下代码演示了如何使用 MaxMind GeoIP 库来获取真实 IP 地址:
<?php
require 'vendor/';
use GeoIp2\Database\Reader;
$reader = new Reader('');
$record = $reader->country($_SERVER['REMOTE_ADDR']);
$realIp = $record->country->isoCode;
echo $realIp;
?>


获取 CDN(内容分发网络)请求的真实 IP 地址对于跟踪用户位置和过滤基于 IP 的请求至关重要。PHP 提供了多种机制来实现此目的,包括通过 HTTP 标头、Cloudflare API 和 IP 溯源库。根据特定应用程序的需求和 CDN 提供商的功能,可以选择最合适的机制。

值得注意的是,获取真实 IP 地址可能并非在所有情况下都是可能的。CDN 和代理可能会采取措施隐藏或修改客户端 IP 地址。在这些情况下,可能需要使用其他方法来估计或近似客户端的地理位置。

2024-11-10


上一篇:PHP 中数据库数据表操作指南

下一篇:PHP嵌入HTML文件:无缝集成前端和后端