|
测试方式
在论坛根目录新建php文件
内容:
- <?php
- // 增强版客户端IP测试(腾讯云EdgeOne专用)
- echo "<h2>腾讯云EdgeOne客户端IP测试</h2>";
- // 1. 核心IP字段检测
- $ipSources = [
- 'REMOTE_ADDR' => '服务器直接连接IP',
- 'HTTP_X_FORWARDED_FOR' => '代理链IP(可能包含多个)',
- 'HTTP_EO_CLIENT_IP' => 'EdgeOne客户端IP',
- 'HTTP_EO_CONNECTING_IP' => 'EdgeOne连接IP',
- 'HTTP_X_REAL_IP' => 'Nginx真实IP',
- 'HTTP_CF_CONNECTING_IP' => 'Cloudflare专用头(兼容性检测)'
- ];
- echo "<h3>📌 核心IP地址信息:</h3>";
- foreach ($ipSources as $key => $desc) {
- $value = $_SERVER[$key] ?? '未设置';
- $highlight = (strpos($value, '.') !== false) ? "style='color:red;font-weight:bold'" : "";
- echo "<b>{$desc}</b> [{$key}]: <span {$highlight}>{$value}</span><br>";
- }
- // 2. EdgeOne专属头检测
- $eoHeaders = [
- 'HTTP_CDN_LOOP' => 'CDN循环标识',
- 'HTTP_EO_LOG_UUID' => '请求唯一ID',
- 'HTTP_X_FORWARDED_PROTO' => '传输协议',
- 'HTTP_CDN_SRC_IP' => 'CDN源IP(如有)'
- ];
- echo "<h3>🔍 EdgeOne专属头信息:</h3>";
- foreach ($eoHeaders as $key => $desc) {
- $value = $_SERVER[$key] ?? '未设置';
- echo "<b>{$desc}</b> [{$key}]: {$value}<br>";
- }
- // 3. 安全与协议头检测
- $securityHeaders = [
- 'HTTP_SEC_CH_UA' => '用户代理品牌',
- 'HTTP_SEC_CH_UA_MOBILE' => '移动设备标识',
- 'HTTP_SEC_CH_UA_PLATFORM' => '操作系统',
- 'HTTP_X_FORWARDED_PROTO' => '前端协议',
- 'HTTP_X_FORWARDED_PORT' => '前端端口'
- ];
- echo "<h3>🛡️ 安全与协议信息:</h3>";
- foreach ($securityHeaders as $key => $desc) {
- $value = $_SERVER[$key] ?? '未设置';
- echo "<b>{$desc}</b> [{$key}]: {$value}<br>";
- }
- // 4. 完整头信息(过滤后)
- echo "<h3>📋 完整相关头信息:</h3>";
- foreach ($_SERVER as $key => $value) {
- // 过滤显示关键头信息
- if (strpos($key, 'HTTP_') === 0 ||
- strpos($key, 'REMOTE_') === 0 ||
- strpos($key, 'CDN_') === 0 ||
- strpos($key, 'EO_') === 0) {
- echo "<b>{$key}</b>: " . htmlspecialchars($value) . "<br>";
- }
- }
- // 5. 客户端真实IP判定逻辑
- echo "<h3>🔐 客户端真实IP判定:</h3>";
- $clientIp = '';
- // EdgeOne优先检测
- if (!empty($_SERVER['HTTP_EO_CLIENT_IP'])) {
- $clientIp = $_SERVER['HTTP_EO_CLIENT_IP'];
- echo "<p style='color:green'>✅ 通过 HTTP_EO_CLIENT_IP 获取真实IP: {$clientIp}</p>";
- } elseif (!empty($_SERVER['HTTP_EO_CONNECTING_IP'])) {
- $clientIp = $_SERVER['HTTP_EO_CONNECTING_IP'];
- echo "<p style='color:green'>✅ 通过 HTTP_EO_CONNECTING_IP 获取真实IP: {$clientIp}</p>";
- }
- // 标准代理头检测
- elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
- $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
- $clientIp = trim($ips[0]);
- echo "<p style='color:orange'>⚠️ 通过 HTTP_X_FORWARDED_FOR 获取IP: {$clientIp} (需验证代理链)</p>";
- }
- // 最后回退方案
- else {
- $clientIp = $_SERVER['REMOTE_ADDR'] ?? '未知';
- echo "<p style='color:red'>❌ 使用 REMOTE_ADDR 作为IP: {$clientIp} (可能不是真实客户端IP)</p>";
- }
- // 6. IP地理位置查询
- if (filter_var($clientIp, FILTER_VALIDATE_IP)) {
- $geoUrl = "http://ip-api.com/json/{$clientIp}?fields=status,country,regionName,city,isp,org,as";
- $geoData = @file_get_contents($geoUrl);
-
- if ($geoData) {
- $geoInfo = json_decode($geoData, true);
- if ($geoInfo['status'] === 'success') {
- echo "<h3>🌍 IP地理位置信息:</h3>";
- echo "IP: {$clientIp}<br>";
- echo "位置: {$geoInfo['country']} - {$geoInfo['regionName']} - {$geoInfo['city']}<br>";
- echo "ISP: {$geoInfo['isp']}<br>";
- echo "组织: {$geoInfo['org']}<br>";
- echo "ASN: {$geoInfo['as']}";
- }
- }
- }
- // 7. 配置建议
- echo "<h3>🚀 EdgeOne配置建议:</h3>";
- echo "<ul>
- <li>确保EdgeOne的『客户端IP透传』功能已开启</li>
- <li>在源站服务器配置中启用『接受客户端IP头』选项</li>
- <li>在Nginx配置中添加: <code>real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0;</code></li>
- <li>测试时清除浏览器缓存避免CDN缓存影响</li>
- </ul>";
- ?>
复制代码 |
|