ysx24 發表於 2025-10-7 16:05:48

(续)discuz使用EdgeOne后获取客户真实ip教程

<br /><br /><font color="#008000">先说优点:为什么推荐使用EO</font><br />收费个人版每月不到10元月租,一般个人站长也足够用了<br />它提供静动态智能链路加速,TCP/UDP四层代理,Web应用防火墙、多路复用与协议优化,和基础防DOSS能力一应俱全的CDN<br />加速效果非常明显<br />(怎么看起来像给EdgeOne打广告,其实还真不是,没人给广告费,哈哈)<br /><br />在使用过程中发现,获取到的用户来源 IP 均为 CDN 节点 IP,而非真实客户端 IP。这在查看和处理日志时带来了一些麻烦,尤其是在拦截恶意 IP 或爬虫时,容易误封 CDN 节点地址。<br /><hr class="l" /><br />上次写过一次类似教程,但发现了很多问题<br />所以准备重写<br />腾讯云EdgeOne 提供永久免费版申请,具体详情https://cloud.tencent.com/document/buy-guide/1552/118985<br />就是申请比较麻烦<br /><br /><strong><font size="3"><font color="#006400">教程:</font></font></strong><br />1、站点加速-规则引擎-创建规则-新增空白规则(如果已有规则在原规则下面添加即可)<br />完成后如下图:<br /><img title="1000019207.jpg" id="aimg_37103" aid="37103" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202510/07/154534rw7bm0bw71w00oh7.jpg" src="https://www.dismall.com/data/attachment/forum/202510/07/154534rw7bm0bw71w00oh7.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><br /><strong><font size="3">2、具体说明</font></strong><br />点击操作,选择客户端ip头部,命名为 “EO-Client-IP”<br /><br /><img title="1000019223.jpg" id="aimg_37111" aid="37111" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202510/07/163342fcx669yh93pch39q.jpg" src="https://www.dismall.com/data/attachment/forum/202510/07/163342fcx669yh93pch39q.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><img title="1000019209.jpg" id="aimg_37104" aid="37104" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202510/07/154934izvgh1uo8ddjhupe.jpg" src="https://www.dismall.com/data/attachment/forum/202510/07/154934izvgh1uo8ddjhupe.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><br /><font size="3"><font color="#008080">3、返回宝塔</font></font><br />在/www/server/nginx/conf/ 目录下新建文件 命名为 tencent_eo_ips.conf <br />打开tencent_eo_ips.conf文件里面添加腾讯云EO回源ip段,格式大概是这样的<br /><img title="1000019213.jpg" id="aimg_37106" aid="37106" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202510/07/160150iya2yjbb5yn52qhw.jpg" src="https://www.dismall.com/data/attachment/forum/202510/07/160150iya2yjbb5yn52qhw.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><br /><font color="#ff0000">注:如果不知道回源ip节点,在eo控制台找到安全防护-源站防护里找</font><br /><font color="#ff0000"><br /></font><img title="1000019211.jpg" id="aimg_37105" aid="37105" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202510/07/155840nwcwjqismu653wut.jpg" src="https://www.dismall.com/data/attachment/forum/202510/07/155840nwcwjqismu653wut.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><font color="#ff0000"><br /><br /><font size="3"><font color="#006400">4、宝塔-网站-配置文件</font></font><br />在配置文件顶部增加<br /><br />5、/condig/config_global.php&nbsp;&nbsp;(这步也可以忽略,我是加上了)<br />搜索:<br /><ol><li>$_config['ipgetter']['setting'] = 'header';</ol>下面添加<br /><ol><li>$_config['ipgetter']['header']['header'] = 'HTTP_EO-Client-IP';</ol><br />完成<br /><hr class="l" /><br />最后:给个最简单的测试方式,把这一个php文件放到网站根目录&nbsp;&nbsp;(1L有完整代码也可以免下载自己去添加)<br /><ignore_js_op><span style="white-space: nowrap" id="attach_37109" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})">2.zip<em class="xg1">(1.82 KB, 下载次数: 459)</em></span>2025-10-7 16:20 上传点击文件名下载附件</ignore_js_op><br />然后运行 https://你网站/2.php<br /><br />预览:<br /><img title="1000019221.jpg" id="aimg_37110" aid="37110" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202510/07/162514x3p42rarzpugadpy.jpg" src="https://www.dismall.com/data/attachment/forum/202510/07/162514x3p42rarzpugadpy.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><br />如果还有什么不明白跟帖回复<br /></font><br />ip

ysx24 發表於 2025-10-7 16:17:46

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

无言以对2012 發表於 2025-10-7 16:28:06

国内的要备案,国际版跟cloudflare有一比,速度感人

CNZZVIP 發表於 2025-10-8 10:57:21

ZHEN正在用EO非常需要

ji8123 發表於 2025-10-10 10:03:03

免费版的能用这个方法吗<br />

ysx24 發表於 2025-10-10 10:03:48

<br />完全一样

gkket 發表於 2025-12-1 22:33:10

CDN 控制台CDN 控制台CDN 控制台

Benisme 發表於 2025-12-2 02:28:08

edgeone有直接传回X-Forwarded-For吧,竟然获取不到真实ip吗

ysx24 發表於 2025-12-2 13:53:15

edgeone有直接传回X-Forwarded-For,获取真实ip,dz上实测不准,而且不指定ip段X-Forwarded-For可以伪造

Benisme 發表於 2025-12-4 15:15:05

<br />我这边倒是都能正常获取,之前还以为这个免费套餐很难申请没想到随便领,测试了几天现在已经用起来了。顺便用边缘函数替代了dz自带的ip库,数据准确多了,pages还可以用来免费存储静态文件。
頁: [1]
查看完整版本: (续)discuz使用EdgeOne后获取客户真实ip教程