EasyWI 6.2.2 配置参数详解
EasyWI 6.2.2 全部配置入口详解:config.php 引导层、settings 单行宽表逐列、账号权限组、API 凭据与 IP 白名单、鉴权链 403 三连与 JSON 静默失败排障实录,全部实测回显。
EasyWI 6.2.2 配置参数详解
目标:把 EasyWI 6.2.2 面板的全部配置入口(
stuff/config.php、settings表、账号/权限表、API 配置表)逐项讲清并给出改法与验证。本文所有回显均来自 6.2.2 实装环境实测(Web 根/var/www/html,PHP 7.4.33,MariaDB 10.11,查询/实测日期 2026-11-02);从零部署见 《EasyWI 6.2.2 Docker Compose 部署指南》。
一、环境信息
| 项目 | 值 |
|---|---|
| 面板版本 | 6.2.2(easywi_version 表实测,见 3.2 节) |
| Web 根目录 | /var/www/html |
| PHP | 7.4.33(cli,NTS) |
| 数据库 | MariaDB 10.11,库 easywi,账号 easywi / q1w2e3r4 |
| 面板地址 | http://localhost:8138/(即 settings.paneldomain 实测值) |
| 管理员账号 | admin / q1w2e3r4(accounttype=a) |
| API 用户 | apiuser / q1w2e3r4 |
二、前置条件
开始改配置前确认三件事,均可实测验证:
- 管理员会话可用(本文 curl 均复用该 cookie jar):
curl -s -c jar.txt "http://localhost:8138/login.php?gamestring=k27a906h3f8m"
curl -s -b jar.txt -c jar.txt -X POST http://localhost:8138/login.php -d "username=admin&password=q1w2e3r4" -w "http_code=%{http_code} redirect=%{redirect_url}\n"
http_code=302 redirect=http://localhost:8138/admin.php
- 数据库客户端可连:
mysql -ueasywi -pq1w2e3r4 easywi -e "SELECT 1;"
1
1
install/目录已删除(否则 login.php/api.php 直接提示Please remove the "install" folder)。
三、参数查看与修改方式
EasyWI 的配置分布在三个入口,改前先认清各自职责:
| 入口 | 位置 | 内容 | 修改方式 |
|---|---|---|---|
| 站点引导配置 | /var/www/html/stuff/config.php | 数据库连接、captcha、debug、时区等 | 安装向导生成,之后手工编辑 |
| 业务配置表 | 数据库 settings 表(单行宽表) | 品牌、语言模板、安全、cron 健康、语音备份等 | 后台 Admin→Settings 界面(推荐)或 SQL |
| 功能域配置表 | api_settings、api_ips、usergroups、userdata 等 | API 凭据、IP 白名单、权限组、账号 | 后台对应管理页 |
3.1 config.php(实测全文)
cat /var/www/html/stuff/config.php
<?php
// This file was generated by the easy-wi.com installer
$host = 'db';
$user = 'easywi';
$db = 'easywi';
$pwd = 'q1w2e3r4';
$captcha = '';
$title = 'Easy-Wi';
$debug = '0';
$timezone = 'Europe/Berlin';
$coloreddashboard = false;
$easywitweets = true;
$examplemodule = true;
该文件由安装向导写入,是面板唯一的"引导层":PDO 连接($host/$user/$db/$pwd)与站点级开关($captcha/$debug/$timezone 等)。改数据库口令必须同步改这里,否则面板全线白屏级报错。
3.2 settings 表(实测结构)
settings 不是键值对表,而是一行多列的宽表,一行即全站配置:
mysql -ueasywi -pq1w2e3r4 easywi -e "DESCRIBE settings;"
Field Type Null Key Default Extra
id int(10) unsigned NO PRI NULL auto_increment
version varchar(10) YES 6.1.5
favicon varchar(100) YES images/favicon.ico
header_icon varchar(100) YES logo_180px.png
header_text varchar(100) YES Easy-Wi
header_href varchar(100) YES https://easy-wi.com
language varchar(2) NO
template varchar(50) YES default
templateColor varchar(50) YES blue
imageserver text YES NULL
cronjob_ips text YES NULL
master enum('Y','N') NO N
voice_autobackup enum('Y','N') YES Y
voice_autobackup_intervall smallint(5) unsigned YES 5
voice_maxbackup smallint(5) unsigned YES 5
prefix1 enum('Y','N') NO Y
prefix2 varchar(15) NO
faillogins smallint(2) unsigned NO 5
brandname varchar(50) YES NULL
timezone varchar(3) YES 0
supportnumber varchar(100) YES NULL
noservertag smallint(1) unsigned NO 1
nopassword smallint(1) unsigned NO 1
tohighslots smallint(1) unsigned NO 1
paneldomain varchar(255) YES NULL
down_checks smallint(5) unsigned YES 2
developer enum('Y','N') YES N
lastUpdateRun smallint(2) unsigned YES NULL
lastCronStatus int(11) unsigned YES NULL
lastCronWarnStatus enum('Y','N') NO Y
lastCronReboot int(11) unsigned YES NULL
lastCronWarnReboot enum('Y','N') NO Y
lastCronUpdates int(11) unsigned YES NULL
lastCronWarnUpdates enum('Y','N') NO Y
lastCronJobs int(11) unsigned YES NULL
lastCronWarnJobs enum('Y','N') NO Y
lastCronCloud int(11) unsigned YES NULL
lastCronWarnCloud enum('Y','N') NO Y
resellerid int(10) unsigned YES MUL 0
login_header_text varchar(255) YES Easy-Wi
输出节选说明:以上为全部 38 列的实测结构(DESCRIBE 原生回显)。列默认值即上游出厂值;当前行实际值见 3.3。
3.3 读取当前配置行
mysql -ueasywi -pq1w2e3r4 easywi -e "SELECT * FROM settings WHERE id=1\G"
输出节选(实测首尾):
*************************** 1. row ***************************
id: 1
version: 6.2.2
favicon: images/favicon.ico
header_icon: logo_180px.png
header_text: Easy-Wi
header_href: https://easy-wi.com
language: en
template: default
templateColor: blue
imageserver: images.easy-wi.com::easy-wi
cronjob_ips:
master: N
voice_autobackup: Y
voice_autobackup_intervall: 5
voice_maxbackup: 5
prefix1: Y
prefix2: user
faillogins: 5
brandname: quzuo.net
timezone: 0
supportnumber: NULL
noservertag: 1
nopassword: 1
tohighslots: 1
paneldomain: http://localhost:8138/
down_checks: 2
developer: N
lastUpdateRun: 10
lastCronStatus: 1793625081
lastCronWarnStatus: Y
lastCronReboot: 1793625062
lastCronWarnReboot: Y
lastCronUpdates: 1793625063
lastCronWarnUpdates: Y
lastCronJobs: 1793625467
lastCronWarnJobs: Y
lastCronCloud: 1793625059
lastCronWarnCloud: Y
resellerid: 0
login_header_text: Easy-Wi
改配置优先走后台界面(Admin→Settings,实测 admin.php?w=sa 返回 200 24755),界面保存后回到这里 SELECT 复核落库值,是最可靠的验证闭环。
四、参数总览
| 分类 | 关键参数 | 入口 |
|---|---|---|
| 引导与调试 | $host/$user/$db/$pwd、$debug、$timezone、$captcha | config.php |
| 站点与品牌 | title、favicon、header_icon/text/href、brandname、paneldomain、login_header_text、templateColor、coloreddashboard | config.php + settings |
| 语言与模板 | language、template、imageserver | settings |
| 安全与账号 | faillogins、nopassword、noservertag、tohighslots、userdata.accounttype、usergroups.* | settings + 表 |
| cron 与监控 | cronjob_ips、lastCron*、lastCronWarn*、down_checks、lastUpdateRun、developer、version | settings |
| 语音服 | master、voice_autobackup(_intervall)、voice_maxbackup、prefix1/prefix2 | settings |
| API | api_settings(user/salt/pwd/active)、api_ips(ip/resellerID) | 表 + 后台 |
| 分销 | resellerid(各表通用归属列)、easywitweets/examplemodule | settings/表/config.php |
五、核心参数分类详解
5.1 引导与调试(config.php)
| 参数 | 实测值 | 说明与改动影响 |
|---|---|---|
$host | db | 数据库主机名,按你的 DB 地址改 |
$user/$db/$pwd | easywi/easywi/q1w2e3r4 | PDO 凭据;口令改动必须与 DB 端同步 |
$captcha | '' | 空=登录无验证码;填 reCAPTCHA 私钥则启用 |
$title | Easy-Wi | 站点标题 |
$debug | 0 | 生产保持 0;置 1 会放大 PHP 错误输出 |
$timezone | Europe/Berlin | 上游默认德国时区,国内部署建议改 Asia/Shanghai 并同步 php.ini |
$coloreddashboard | false | 首页彩色卡片 |
$easywitweets | true | 拉取官方动态(内网部署建议 false) |
$examplemodule | true | 示例模块加载 |
验证方式:改后无需重启服务,刷新面板即生效;异常时看 Apache error 日志。
5.2 站点与品牌(settings)
| 参数 | 实测值 | 说明 |
|---|---|---|
favicon | images/favicon.ico | 图标相对路径 |
header_icon | logo_180px.png | 页头 logo |
header_text / header_href | Easy-Wi / https://easy-wi.com | 页头文字与其链接 |
brandname | quzuo.net | 品牌名(监控纠偏项之一:被改名会被自动纠正) |
paneldomain | http://localhost:8138/ | 面板对外地址,换域名/上 HTTPS 必改,邮件与回调均引用它 |
login_header_text | Easy-Wi | 登录页标题文字 |
templateColor | blue | 模板配色 |
💡 说明:品牌三件套(brandname + 改名自动纠正)是 EasyWI 面向托管经营的差异化能力,选型背景见 《EasyWI 介绍与选型指南》 第四节。
5.3 语言与模板
language=en:界面语言,语言包为 XML(官方列英/丹/意/德四语)。template=default:视图模板目录;README 明确"模块与视图分离、模板回退",定制模板缺失时自动回退 default。imageserver=images.easy-wi.com::easy-wi:游戏图标等静态资源的上游资源服务器(host::path格式);纯内网部署可自建静态资源站点后改此值。
5.4 安全与账号
settings 侧:
| 参数 | 实测值 | 说明 |
|---|---|---|
faillogins | 5 | 连续失败次数上限 |
nopassword | 1 | 弱口令策略开关 |
noservertag | 1 | 服务器标签策略开关 |
tohighslots | 1 | 超售槽位策略开关 |
supportnumber | NULL | 客服号码展示位 |
账号与权限实测数据(userdata 仅一个 admin,节选):
mysql -ueasywi -pq1w2e3r4 easywi -e "SELECT * FROM userdata WHERE id=1\G"
id: 1
creationTime: 2026-11-02 13:02:24
active: Y
cname: admin
security: $2y$10$5gOuGL.V3SHmH8OUNFZIM.NdsuF8mqp.gddcOZ/bvR98E4VVzvw86
mail: admin@example.com
language: en
accounttype: a
resellerid: 0
security 列为 bcrypt($2y$10$ 前缀,cost=10)存储的管理员口令散列;accounttype 三值 a/r/u 对应 Admin/Reseller/User。
权限组实测(usergroups 表,安装即建三组):
mysql -ueasywi -pq1w2e3r4 easywi -e "SELECT id,name,grouptype,defaultgroup,root FROM usergroups;"
id name grouptype defaultgroup root
1 Admin Default a Y Y
2 Reseller Default r Y N
3 User Default u Y N
usergroups 的权限是逐功能列开关(实测 id=1 行节选):root=Y、miniroot=N、settings=N、log=N、ipBans=N、updateEW=N、feeds=N、jobs=N、apiSettings=N、cms_settings=N、mysql=N、user=N、masterServer=N、gserver=N、addons=N、restart=N ……——即便 Admin Default 组,细粒度权限也默认关闭,按需逐项放开,属于默认最小权限设计。
5.5 cron 与监控健康
| 参数 | 实测值 | 说明 |
|---|---|---|
cronjob_ips | (空) | 允许通过 HTTP 触发 cron 脚本的来源 IP 白名单;为空则 HTTP 触发一律被拒(见 7.3) |
lastCronStatus/Reboot/Updates/Jobs/Cloud | 1793625081 / 1793625062 / 1793625063 / 1793625467 / 1793625059 | 各 cron 最近一次运行时间戳 |
lastCronWarn* | 全 Y | 对应 cron 的健康告警位;后台首页四张状态卡即读这组值 |
down_checks | 2 | 判定服务器离线前的连续探测次数 |
lastUpdateRun | 10 | 更新检查运行时刻(分钟位) |
developer | N | Y 时走 developer build 更新线(当前稳定线 N) |
version | 6.2.2 | 面板数据版本 |
后台首页实测文本(admin.php?w=sa 页面提取):Cronjob: statuscheck.php、Cronjob: startupdates.php、Cronjob: jobs.php、Cronjob: cloud.php 四张健康卡——cron 脚本本身的命令行实测见《EasyWI 6.2.2 常用 CLI 命令与工具详解》篇。
5.6 语音服务器参数
| 参数 | 实测值 | 说明 |
|---|---|---|
master | N | 本面板是否为 TS3 master 节点 |
voice_autobackup | Y | 语音服配置自动备份开关 |
voice_autobackup_intervall | 5 | 自动备份间隔(分钟) |
voice_maxbackup | 5 | 保留备份份数 |
prefix1 | Y | 虚拟服命名前缀开关一 |
prefix2 | user | 命名前缀二(拼接规则) |
5.7 API 配置域(重点)
API 凭据存 api_settings(实测全行):
mysql -ueasywi -pq1w2e3r4 easywi -e "SELECT * FROM api_settings\G"
*************************** 1. row ***************************
resellerID: 0
userID: NULL
active: Y
user: apiuser
salt: f84775e4855b074790686e19be08445a
pwd: 8667c31e0836727143e3070fcb9d4bcf1f52a87fe291b30a42793e3786dce4afeffac1441352fc3800e96dec2103c94468cff72995cf16eb59490a16da1d95cb
pwd 是 passwordhash(明文, salt) 的 128 位十六进制散列。口令验证实测(服务器本机):
php -r "include('/var/www/html/stuff/methods/functions.php'); echo passwordhash('q1w2e3r4','f84775e4855b074790686e19be08445a');"
输出与库中 pwd 完全一致 → apiuser 的 API 口令即 q1w2e3r4。
IP 白名单实测:
mysql -ueasywi -pq1w2e3r4 easywi -e "SELECT * FROM api_ips;"
ip resellerID
10.89.65.1 0
鉴权链(源码归纳+实测):api.php 依次校验 ① 来源 IP ∈ api_ips → ② user/pwd 匹配 api_settings → ③ type ∈ {gserver,list,tsdns,mysql,user,voice,web} → ④ 业务参数走 json= 或 xml=(值为 base64;服务端 urldecode(base64_decode()) 后 json_decode/simplexml)。每一步失败都有专属 403 文案,三连实测:
curl -s -X POST http://localhost:8138/api.php -d "type=user"
403 Forbidden: No valid access data. No API user given. Request IP is: 10.89.65.1
curl -s -X POST http://localhost:8138/api.php -d "user=apiuser&pwd=wrongpass&type=user"
403 Forbidden: No valid api data Request IP is: 10.89.65.1
curl -s -X POST http://localhost:8138/api.php -d "user=apiuser&pwd=q1w2e3r4&type=user"
403 Forbidden: Neither POST value xml, nor JSON has been send!
三条 403 逐层验证了鉴权链。业务请求示例(实测,未注册任何游戏服时的响应骨架):
curl -s -X POST http://localhost:8138/api.php -d "user=apiuser&pwd=q1w2e3r4&type=gserver&action=ls&json=$(base64 -w0 <<< '{}')"
{"action":null,"private":"","active":"","identify_server_by":"","shorten":"","slots":"","server_external_id":"","server_local_id":"","identify_user_by":"","user_localid":"","user_externalid":"","username":"","errors":null}
type=list&action=ls 则实测返回 HTTP/1.1 200、Content-Length: 0(空响应体,列表数据源为空时的形态)。
⚠️ 注意(坑实录):
json=的值若被二次 urlencode(如某些客户端把 base64 里的+/=再编码一层),服务端解出来不是合法 JSON,报错文案为平台原文拼写:403 Forbidden: JSON not vaild。排障时先比对 base64 原文再查编码层。
六、生产配置模板
适用场景:面向公网的小型托管节点(2–4 核 / 4GB 内存 / SSD),PHP 7.4 一代。
stuff/config.php 建议值(相对实测环境的改动):
$captcha = ''; // 上 HTTPS 后建议接入 reCAPTCHA
$debug = '0';
$timezone = 'Asia/Shanghai';
$easywitweets = false; // 内网/合规考虑不拉外部动态
settings 表建议改动(后台界面操作):paneldomain 改真实域名、brandname 改自有品牌、cronjob_ips 填 cron 触发机 IP、language 按用户群设置。
php.ini(easywi.ini)生产基线:
date.timezone = Asia/Shanghai
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M
七、常见问题
7.1 API 建用户:JSON 模式静默失败,XML 模式才报错
同一条 add 请求,JSON 载荷实测返回全 null 但库里没有新行:
{"action":null,"username":"apitest2","external_id":"apitest2@example.com","email":"apitest2@example.com","errors":"","password":"","active":"Y","localid":"0"}
(userdata 复查无 apitest2。)改用 XML 载荷,同一失败立刻显形:
<action>fail</action><actionSend>add</actionSend><username>apitest4</username>
<errors>Could not write user to database</errors><localid>0</localid>
定位过程(实测):手工执行同款 INSERT 直进 MariaDB 成功落库 → 差异在 PHP 层。源码 stuff/api/api_users.php 第 231 行 INSERT 后用 isid(lastInsertId(),10) 判定,假则走 273 行返回 Could not write user to database。双重坑:PDO 默认静默吞错 + JSON 响应分支不回显失败字段。结论:批量对接先小样本用 XML 模式验证,再切 JSON。
7.2 ls 动作输出混入 PHP Warning
实测 type=user&action=ls 曾返回:
[]<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /var/www/html/stuff/api/api_users.php:755) in <b>/var/www/html/stuff/api/api_users.php</b> on line <b>869</b><br />
{"action":null,"username":"","external_id":"","email":"","errors":"","password":"","active":"","localid":""}
定位:755 行在 header() 前产生了 echo(调试输出残留),导致 869 行发 JSON 头时 headers already sent,响应体被污染。处理:清除该文件多余输出后恢复正常 []。教训:API 响应体混 HTML 时先查 echo/warning,而不是查数据层。
7.3 浏览器打开 cron 脚本被拒
HTTP 访问 statuscheck.php 返回文本 Statuscheck can only be run via console or a cronjob;startupdates.php 的守卫(源码 78 行)要求 SERVER_ADDR 等于本机 IP 或 REMOTE_ADDR 命中 settings.cronjob_ips。需要 HTTP 触发时把来源 IP 加入 cronjob_ips,否则一律用命令行方式跑(见 CLI 篇)。
7.4 改完 settings 不生效
先确认改的是哪一层:品牌/语言/监控类在 settings 表(后台保存后 SELECT 复核,见 3.3);连接/captcha/debug 在 config.php(改文件即生效)。两层同名概念(如时区:$timezone vs settings.timezone)互不覆盖,排查时以 SELECT + cat 实测值为准。