找到
16
篇与
技术教程
相关的结果
- 第 3 页
-
Joe再续前缘SafeGo适配魔改 青序栈文官 SafeGo插件适配Joe再续前缘主题,替换goto.php文件实现安全跳转页面功能,支持配置倒计时、Base64编码、头像、标题等,提供黑暗模式选项。 此内容根据文章生成,仅用于文章内容的解释与总结 原项目项目是柳神开发的Hexo插件安全跳转页面·插件版,我使用AI移植到了Joe再续前缘主题。 Joe再续前缘的外链中间页地址是/usr/themes/joe/module/goto.php,复制以下代码直接全部替换即可! 效果如图 mdjmqxqg.png图片 <?php // 检查必要条件 if (!defined('__TYPECHO_ROOT_DIR__') || empty($_SERVER['HTTP_HOST'])) { http_response_code(404); exit; } // 获取 URL 参数 function GetQueryString($name) { $query = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY); parse_str($query, $params); return isset($params[$name]) ? urldecode($params[$name]) : null; } // Base64 解码函数 function base64Decode($input) { return base64_decode($input); } // 配置参数,可根据需要修改 $countdown = 10; // 倒计时秒数 $url_param_name = 'url'; // URL 参数名 $enable_base64_encode = true; // 是否启用 Base64 编码 $avatar = $this->options->JFavicon; // 头像链接 $title = $this->options->title; // 标题 $subtitle = '大理寺卿'; // 副标题 $darkmode = false; // 是否启用黑暗模式 // 获取跳转 URL $jump_url = GetQueryString($url_param_name); if ($enable_base64_encode) { $jump_url = base64Decode($jump_url); } // 检查 URL 格式 $UrlReg = '/^((http|https|thunder|qqdl|ed2k|Flashget|qbrowser|ftp|rtsp|mms):\/\/)/'; if (!$jump_url ||!preg_match($UrlReg, $jump_url)) { $title = '参数错误,正在返回首页...'; $jump_url = $_SERVER['HTTP_HOST']; } ?> <!DOCTYPE html> <html lang="zh"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="robots" content="noindex, nofollow"/> <title><?php echo $title; ?></title> <style type="text/css"> body { display: flex; align-items: center; justify-content: center; height: 100vh; margin: 0; font-family: Arial, sans-serif; overflow: hidden; flex-direction: column; } .avatar-placeholder, .avatar { width: 100px; height: 100px; border-radius: 50%; margin-bottom: 15px; display: block; } .avatar { display: none; } .description { font-size: 18px; } .subtitle { font-size: 12px; margin-bottom: 20px; color: #C4C4C4; } .loading { text-align: center; padding: 30px; border-radius: 18px; animation: fadein 2s; width: 400px; max-width: 90%; } @keyframes fadein { from { opacity: 0; } to { opacity: 1; } } .content { margin-bottom: 20px; } .url-text { margin-bottom: 10px; font-size: 16px; letter-spacing: 1px; } .jump-url { font-size: 20px; display: block; margin-top: 5px; margin-bottom: 25px; padding: 15px; border-radius: 8px; height: 25px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .countdown-text { margin-top: 12px; font-size: 12px; } .button-container { display: flex; justify-content: center; gap: 20%; margin-top: 20px; } .button { padding: 10px 20px; border-radius: 16px; border: none; cursor: pointer; font-size: 16px; width: 120px; height: 40px; } .cancel-button { color: black; } .confirm-button { color: white; } .progress-bar { width: 100%; border-radius: 5px; overflow: hidden; height: 10px; margin-top: 20px; } .progress { width: 100%; height: 100%; transition: width 1s; } <?php if ($darkmode): ?> body { background: linear-gradient(135deg, #364f6b, #222831); } .loading { background: #393e46; color: #EFEFEF; box-shadow: 0 4px 8px rgba(100, 100, 100, 0.1); } .description { color: #F3F3F3; } .url-text, .countdown-text { color: #EFEFEF; } .jump-url { border: 1px solid #777; background-color: #333; color: #EFEFEF; } .cancel-button { background-color: #872C2C; color: #FFF; } .confirm-button { background-color: #28566F; color: #FFF; } .progress-bar { background-color: #444; } .progress { background-color: #888; } <?php else: ?> body { background: linear-gradient(135deg, #E9E9E9, #FFFFFF); } .loading { background: rgba(255, 255, 255, 0.7); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .url-text { color: #333; } .jump-url { border: 1px solid #ccc; background-color: #F7F9FE; color: #333; } .countdown-text { color: #515151; } .cancel-button { background-color: #a6e3e9; } .confirm-button { background-color: #3fc1c9; } .progress { background-color: #abedd8; } <?php endif; ?> </style> <script type="text/javascript"> const host = window.location.host; let countdown = <?php echo $countdown; ?>; let jump_url = '<?php echo $jump_url; ?>'; let progressElement; let countdownElement; let countdownTextElement; let jumpUrlElement; function updateCountdown() { if (countdown < 0) { countdownTextElement.textContent = "💡自行点击跳转,请注意您的账号和财产安全"; return; } countdownElement.textContent = countdown; progressElement.style.width = (countdown / <?php echo $countdown; ?> * 100) + '%'; if (countdown === 0) { jump(); } else { countdown--; setTimeout(updateCountdown, 1000); } } function jump() { location.href = jump_url; } function closeWindow() { window.opener = null; window.close(); } function loadAvatar() { const avatarImg = document.querySelector('.avatar'); const placeholder = document.querySelector('.avatar-placeholder'); const img = new Image(); img.src = '<?php echo $avatar; ?>'; img.onload = function () { avatarImg.src = img.src; avatarImg.style.display = 'block'; placeholder.style.display = 'none'; } } window.addEventListener('load', function () { loadAvatar(); progressElement = document.getElementById('progress'); countdownElement = document.getElementById('countdown'); countdownTextElement = document.querySelector('.countdown-text'); jumpUrlElement = document.getElementById('jump-url'); jumpUrlElement.textContent = jump_url; updateCountdown(); }); </script> </head> <body> <div class="avatar-placeholder"></div> <img src="" alt="头像" class="avatar"> <div class="description"><?php echo $title; ?></div> <div class="subtitle"><?php echo $subtitle; ?></div> <div class="loading"> <div class="content"> <div class="url-text">您即将离开本站,跳转到:</div> <div class="jump-url" id="jump-url"></div> </div> <div class="countdown-text">⚡将在<span id="countdown"></span>秒后跳转,请自行确认链接安全性</div> <div class="progress-bar"> <div class="progress" id="progress"></div> </div> <div class="button-container"> <button class="button cancel-button" onclick="closeWindow()">取消跳转</button> <button class="button confirm-button" onclick="jump()">立即跳转</button> </div> </div> </body> </html>目前可配置项如下 mdiv9uq7.png图片 -
Joe再续前缘魔改铺垫(一) 青序栈文官 从Hexo安知鱼主题迁移后,旧美化教程不适用,作者研究两三天移植部分内容,本期为魔改教程铺垫。介绍了柳神两个项目“朋友圈精简版”和“友链状态检测”的适配方法,包括新建api文件夹和php文件,实现伪静态静态化json。下期将出适配鱼塘的教程。 此内容根据文章生成,仅用于文章内容的解释与总结 从 Hexo 安知鱼主题迁移过来后,许多旧的美化教程都不适用了,网上搜搜也找不到多少适配的。 研究了两三天后,已经移植了不少,本期是魔改教程铺垫的第一期,后续会发正式魔改教程。 那时候魔改印象最深刻的还是柳神的两个项目 朋友圈精简版 > 友链状态检测具体使用教程请见仓库的 readme 文档,及柳神博客的相关教程。 朋友圈精简版 friend.json 适配 根目录新建文件夹 api,里面创建friend.php文件 mdgxwvrl.png图片 文件内容如下 隐藏内容,请前往内页查看详情 可以使用伪静态实现静态化 json 规则如下 62a300 每日一图图片 友链状态检测 flink_count.json 适配 根目录新建文件夹 api,里面创建flink_count.php文件 mdgyce3c.png图片 文件内容如下 隐藏内容,请前往内页查看详情 可以使用伪静态实现静态化 json 规则如下 62a300 下期出适配鱼塘的教程 本站邮箱订阅链接 -
EO官方IP段API使用教程 青序栈文官 EdgeOne 提供官方 API `https://api.edgeone.ai/ips` 获取全球回源节点 IP 段,支持 IPv4/IPv6,可通过参数筛选版本和区域。用户可通过 curl 获取并保存,用于防火墙白名单配置,建议自动化更新以应对动态调整的 IP。注意关闭源站防护功能,确保 IP 格式正确。 此内容根据文章生成,仅用于文章内容的解释与总结 EdgeOne 官方 IP 段 API 使用教程:轻松获取回源节点 IP EdgeOne 作为腾讯云推出的边缘安全加速平台,提供了全球分布的回源节点网络。为了确保源站安全,我们通常需要将这些回源节点的 IP 地址加入防火墙白名单。本文将详细介绍如何通过 EdgeOne 官方 API 获取这些 IP 段,并分享一些实用技巧。 一、API 基本介绍 EdgeOne 提供了简单的 HTTP API 来获取其全球回源节点 IP 列表: API 地址: https://api.edgeone.ai/ips 响应格式: UTF-8 编码的纯文本,每行一个 IP 段 支持协议: 同时包含 IPv4 和 IPv6 地址 二、基础使用方法 1. 获取全部 IP 段 只需通过浏览器或命令行工具访问 API 地址即可: curl https://api.edgeone.ai/ips响应示例: 203.107.1.1/24 2408:4000::/32 ...2. 命令行获取并保存到文件 curl -s https://api.edgeone.ai/ips > edgeone_ips.txt三、高级筛选功能 API 支持通过查询参数筛选特定类型的 IP 地址: 1. 按 IP 版本筛选 参数值说明versionv4仅获取 IPv4 地址versionv6仅获取 IPv6 地址示例(获取所有 IPv6 地址): curl "https://api.edgeone.ai/ips?version=v6"2. 按区域筛选 参数值说明areamainland-china仅获取中国大陆区域的 IPareaoverseas获取非中国大陆区域的 IPareaglobal获取全球所有区域的 IP(默认)示例(获取中国大陆区域的 IPv4 地址): curl "https://api.edgeone.ai/ips?version=v4&area=mainland-china"四、自动化更新建议 由于 EdgeOne 的回源节点 IP 会动态调整,建议: 每小时检查更新:设置定时任务每小时获取一次最新 IP 列表 自动更新防火墙规则:将获取的 IP 自动同步到源站防火墙 变更检测:比较新旧 IP 列表,只更新有变化的部分 示例 cron 任务(每小时执行一次): 0 * * * * /usr/bin/curl -s https://api.edgeone.ai/ips > /etc/edgeone_ips.txt && systemctl reload firewall五、注意事项 与源站防护功能互斥:使用此 API 前,请确保已关闭 EdgeOne 的源站防护功能 IP 段格式:返回结果为 CIDR 格式,确保防火墙支持此类格式 服务区域匹配:建议根据站点服务区域选择对应区域的 IP(如仅服务中国大陆用户,只需获取 mainland-china 区域的 IP) 六、实际应用案例 1. Nginx 白名单配置 获取 IP 列表后,可以更新 Nginx 配置: allow 203.107.1.1/24; allow 2408:4000::/32; deny all;2. iptables 防火墙规则 # 清空旧规则 iptables -F EDGEONE_WHITELIST # 添加新规则 while read -r ip; do iptables -A EDGEONE_WHITELIST -s "$ip" -j ACCEPT done < edgeone_ips.txt七、常见问题 Q:为什么需要定期更新 IP 列表? A:EdgeOne 会根据网络状况和节点部署情况动态调整回源节点,IP 地址会相应变化。不及时更新可能导致回源失败。 Q:如何验证 API 返回的 IP 是否有效? A:可以通过 ping 或 traceroute 测试这些 IP 的可达性,确认它们确实属于 EdgeOne 网络。 Q:是否可以使用 DNS 查询替代 API? A:不建议。API 提供的是权威的、最新的 IP 列表,而 DNS 查询可能不完整或滞后。 -
EdgeOne优选教程 青序栈文官 EdgeOne优选教程建议将域名CNAME到eo.qxzhan.cn或eo.wudu.ltd以降低中国大陆用户访问延迟。优选方法包括添加解析记录,使用国内厂商支持免费分线路解析的服务。优选IP段为43.174.150.0/24等,需注意优选有风险,可能被攻击导致封禁。 此内容根据文章生成,仅用于文章内容的解释与总结 在稳定吃上了EO之后,默认分配的节点延迟高,对中国大陆用户访问影响较大。 于是————诞生出了eo优选这一野路子~ 如何优选? 隐藏内容,请前往内页查看详情 有小伙伴就要问了:“诶呀诶呀栈主,控制台显示‘请添加 CNAME’怎么办呢?”。栈主表示————你都优选了还管他做甚?非要变成'已生效'状态也不是不行(给给给!) 很简单,国际站的eo解析检测只会检测海外记录,我们只需要添加个解析记录cname到默认地址即可,这样还能自动续签SSL证书,美滋滋(老八音)! 大部分国内厂商应该都支持免费分线路解析,比如华为云、DNSPOD、阿里云等,但海外厂商没有这项服务,那就没办法了,续签SSL证书时手动更换吧!誒~ 下面分享我优选IP的思路。 有官方给出的IP段地址,但这些是L7回源防护的段,具体请见EO地址段结合多方面情报,我找出比较稳定几段 43.174.244.* 43.174.243.*注意EO的IP是从.0到.254的 这些都是香港节点延迟在40ms左右。 不怕累的栈主脚本生成了所有ip,手动添加了DNS记录,也就是eo.wudu.ltd 多日前EO的节点遭受攻击,导致1000多个IP只剩下几百个能用,中国大陆访问绿中闪电,这可不行,栈主得想办法动态优选。 找AI生成了批量测试脚本和DNS更新脚本,源码下期分享,终于实现了动态优选。但--还没完,为什么只有50个解析IP,™的我一报错,是华为云DNS API拒绝创建新的解析记录集,也就是说通过API的方式只能修改一个解析记录集。欸~50个IP也可以了,于是我就把脚本放到了服务器上跑,产生eo.qxzhan.cn这个优选域名。 鸣谢华为云DNS的TTL 1s支持!!! 注意注意!! 优选有风险,遭打要写小作文申请解封的! 客服是这么说的———— eokefu.png图片 看看栈主的悲催故事呜呜 zuizhong.png图片 目前海外解析到默认地址不知道会不会封,也希望各位不要被攻击,不要惹人! 好,这期就这样,瑞斯拜! -
EdgeOne缓存规则分享 青序栈文官 EdgeOne通过全球边缘节点缓存静态资源,显著降低延迟、源站负载和带宽成本。配置缓存规则需设置匹配条件(文件后缀、路径等)、全局配置(智能压缩、HTTPS等)和规则引擎(禁用缓存、默认缓存、动态优化)。关键策略包括静态资源强制缓存、动态内容按需缓存和敏感路径禁用缓存,以提升网站性能。 此内容根据文章生成,仅用于文章内容的解释与总结 腾讯云EdgeOne缓存配置全解析:加速网站的秘密武器 本文深度解读EdgeOne边缘加速服务的缓存规则配置技巧,附实战配置案例。一、为什么需要边缘缓存? 在网站访问过程中,静态资源加载耗时往往占据页面打开时间的70%以上。EdgeOne通过全球2800+边缘节点,将内容缓存至离用户最近的节点,实现: ⚡️ 平均延迟降低60%+ 📉 源站负载减少80%+ 💰 带宽成本显著下降 边缘缓存工作原理示意图图片 二、EdgeOne缓存规则核心配置项 1. 缓存规则入口 控制台路径:EdgeOne控制台 > 站点配置 > 规则引擎 > 缓存配置 2. 规则匹配条件 匹配类型示例值适用场景文件后缀.jpg;.css;.js;.png;.webp;.ttf;.woff静态资源加速目录路径/usr/uploads/*特定目录资源缓存全路径/post/eo-cache.php精准页面缓存首页/首页加速3.站点全局配置 设置项目子项开启或关闭忽略大小写无子项开启智能压缩Gzip全局开启智能压缩Brotli全局开启HTTPS重定向方式:301 or 302开启HTTP/2 回源无子项根据源站选择开启/关闭HSTS无子项默认配置开启SSL/TLSTLS版本1.2+1.3SSL/TLS密码套件eo-strict-v2023OCSP 装订无子项开启HTTP/2无子项开启IPv6访问无子项根据服务需求选择开启/关闭WebSocket无子项根据服务需求选择开启/关闭4.规则引擎配置 直接上图片 Ⅰ禁用缓存(API类需要动态调用等) 禁用缓存图片 Ⅱ默认缓存(静态文件等) 默认缓存图片 Ⅲ动态优化(不那么需求实时响应) 动态优化图片 写在最后 通过合理配置EdgeOne的缓存规则,你的网站将获得不错的基础加速体验。关键记住三点: 静态资源强制缓存(JS/CSS/图片等) 动态内容按需缓存(如配置短时缓存或动态优化) 敏感路径禁用缓存(如API接口、用户中心) 立即登录 EdgeOne控制台 实践文中的配置策略,感受边缘加速带来的性能飞跃吧!🚀 本文首发于个人技术博客,持续更新云服务实战技巧 原创声明:转载需保留来源信息 @青序栈