插件介绍:ServerStats 是一款专为 Handsome 主题开发的服务器状态监控插件,无需修改主题源文件,一键启用即可在导航栏添加实时服务器状态栏。基于前辈的一些各种教程,采用纯插件化架构,完美兼容 Handsome 主题,支持 Pjax 无刷新加载,具备完善的安全防护机制。
📋 环境说明
1. 💻 系统与环境
| 项目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | 🐧 Linux | CentOS Stream 9 / Ubuntu 22.04 / Debian 10.2+ |
| PHP 版本 | 🐘 7.4 ~ 8.3 | 推荐 PHP 8.0+ |
| Typecho | 📝 1.2.1+ | 低版本未测试,建议升级 |
| Handsome 主题 | 🎨 任意版本 | 需支持导航栏下拉菜单 |
| Web 服务器 | 🌐 Nginx / Apache | 两者均可 |
2. ⚙️ PHP 函数
插件通过读取 /proc 目录获取系统状态,仅需 file_get_contents 函数可用。请确保该函数未被禁用:
| 函数 | 必要性 | 说明 |
|---|---|---|
file_get_contents | ✅ 必需 | 用于读取 /proc 目录下的系统文件 |
shell_exec | ❌ 不需要 | 插件未使用 |
exec | ❌ 不需要 | 插件未使用 |
system | ❌ 不需要 | 插件未使用 |
💡file_get_contents是 PHP 核心函数,默认开启,极少被禁用。如被禁用,请在php.ini的disable_functions中移除即可。
🔍 验证命令:
php -r "echo file_get_contents('/proc/uptime');"📌 检查方法:
- 查看
php.ini中的disable_functions配置项 - 如被禁用,请移除对应函数名后重启 PHP 服务
3. 🗜️ 宝塔面板用户配置说明
如使用宝塔面板,默认的 open_basedir 限制不包含 /proc/ 目录,会导致 CPU、内存、负载等数据无法读取。
🔧 解决方法:在网站根目录的 .user.ini 文件末尾添加 :/proc/:
open_basedir=/www/wwwroot/your.domain/:/tmp/:/proc/⚠️ 请将 your.domain 替换为实际网站目录名称,修改后重启 PHP 服务生效。✅ 验证方法:启用插件后,点击状态栏图标,如 CPU/内存/负载显示正常数据则配置成功,如显示 -- 或 0 则需检查上述配置。
4. 🛠️ 系统工具(可选)
部分系统可能需要安装基础工具包:
# Debian/Ubuntu
apt-get update && apt-get install -y procps net-tools
# CentOS
yum install -y procps net-tools
# 查看安装情况
$ command -v ps && command -v ifconfig && echo "✅ 全部已安装" || echo "❌ 缺少组件"💡 大多数系统已默认安装,如数据正常显示可跳过此步骤。
5. 🔌 兼容性说明
| 环境 | 兼容性 | 备注 |
|---|---|---|
| 长亭雷池 WAF | ✅ 兼容 | 支持获取真实 IP |
| 宝塔 WAF | ✅ 兼容 | 支持获取真实 IP |
| Cloudflare CDN | ☁️ 兼容 | 自动识别 CF-Connecting-IP |
| Pjax 无刷新 | 🔄 兼容 | Handsome 默认支持 |
✨ 功能特点
🖥️ 服务器监控
- CPU 使用率:实时显示占用百分比,支持多核心检测
- 内存状态:真实内存使用量、缓存(buffer)、缓冲(cached) 分别展示
- 磁盘占用:实时显示磁盘使用量和总量
- 系统负载:1min/5min/15min 负载展示
- 缓存命中率:智能计算内存缓存命中率
- 服务器运行时间:精确到秒的运行时长
🌐 网络监控
- 网络流量:主网卡上传/下载总量 + 实时速率
- 磁盘 I/O:磁盘读写总量 + 实时速率
- Web 服务器信息:服务器软件、通信协议、PHP 版本
👤 访客信息
- 真实 IP 获取:兼容 CDN、WAF(Cloudflare、雷池、宝塔等)
- 设备/浏览器识别:自动识别操作系统和浏览器类型
- 请求信息:请求方法、服务语言、连接类型、当前域名
🛡️ 安全防护
- 域名白名单:防止 API 被外部盗用(在插件页面配置)
- 频率限制:每分钟最多 30 次请求,防止恶意刷取
- 文件读取限制:仅允许读取
/proc等安全路径
📥 安装步骤
1. 📂 下载插件
将插件解压后上传至 /usr/plugins/ServerStats/ 目录,目录结构如下: 下载插件
/usr/plugins/ServerStats/
├── Plugin.php # 插件主文件
├── serverInfo.php # API 接口文件
├── plugin_config.json # 配置文件(自动生成)
├── assets/
│ ├── script.js # 前端脚本
│ └── style.css # 样式文件
└── cache/ # 缓存目录(自动创建)
├── stats/ # 数据缓存
└── limit/ # 频率限制缓存2. 🔌 启用插件
进入 Typecho 后台 → 控制台 → 插件 → 找到 ServerStats → 点击 启用
3. ⚙️ 配置插件
插件启用后会自动创建配置文件和缓存目录,一般无需额外配置。如需调整:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
| API 地址 | serverInfo.php 访问路径 | /usr/plugins/ServerStats/serverInfo.php |
| 刷新间隔 | 数据刷新毫秒数 | 5000 |
| Pjax 兼容 | Handsome 默认启用 Pjax | 启用 |
| 域名白名单 | 允许访问 API 的域名 | 自动识别当前域名 |
| FontAwesome | FontAwesome 小图标 | 启用 |
| 调试模式 | debug.log 用于排查问题 | 禁用 |
4. ✅ 验证安装
启用插件后,访问网站首页,查看导航栏右侧是否出现服务器状态图标(🧮)。点击图标展开面板,如正常显示数据则安装成功。
🖼️ 界面预览
状态栏位于导航栏右侧,点击图标即可展开下拉面板:
| 区域 | 显示内容 |
|---|---|
| 运行状态 | CPU/内存/磁盘/缓存/缓冲/负载 + 进度条 |
| 网络状态 | 网络流量/实时速率 + IO 读写/实时速率 |
| 访客信息 | IP/设备/浏览器/服务器时间/运行时长等 |
❓ 常见问题
Q1:状态栏不显示?
- 检查插件是否已启用
- 检查 Handsome 主题导航栏是否存在
ul.nav.navbar-nav元素 - 按 F12 查看控制台是否有 JavaScript 报错
- 插件设置打开调试模型查看日志记录
Q2:数据显示为
-- 或 0?
- 检查 PHP 是否有权限读取
/proc目录 - 运行测试命令:
php -r "var_dump(file_get_contents('/proc/uptime'));" - 检查
serverInfo.php路径是否正确
Q3:API 返回 403 错误?
- 检查域名白名单配置是否正确
- 确认请求来源域名在白名单中
- 本地/内网请求会自动放行
Q4:API 返回 429 错误?
- 触发频率限制,每分钟请求超过 30 次
- 降低前端刷新间隔配置
Q5:与主题原本的服务器状态栏冲突怎么办?
- 插件会自动移除原主题的状态栏元素(
#StateDataPos),两者不会冲突。如仍有问题,请确保主题未魔改过相关源代码结构。 - 留言具体问题
📅 更新日志
| 版本 | 日期 | 更新内容 |
|---|---|---|
| v2.2.3 | 2025-05-17 | 🎉 初始插件版本发布 • 无需修改主题源文件 • 新增域名白名单 + 频率限制双重安全防护 • 优化 Pjax 兼容性 • 内置 /proc 安全读取机制 • 前端脚本完全重写 |
| v2.2.2 | 2025-04-20 | 🐛 修复宝塔面板环境下数据读取问题 • 优化缓存命中率计算 • 新增磁盘 IO 实时速率显示 |
| v2.2.1 | 2025-04-10 | 🔧 修复 Pjax 切换页面后状态栏失效 • 优化移动端显示效果 • 新增服务器软件、PHP 版本等信息 |
| v2.2.0 | 2025-04-01 | 📊 新增缓存命中率监控 • 新增操作系统详细版本识别 • 优化网络流量统计算法 |
| v2.1.0 | 2025-03-20 | 🚀 首次公开发布 • 支持访客 IP/设备/浏览器获取 • 支持网络流量和磁盘 IO |
📞 支持与反馈
如有问题或建议,欢迎在评论区留言。
- 👨💻 博客:「留言」板块
此处评论已关闭