Chhoto URL 7.10.3 配置参数详解
Chhoto URL 7.10.3 全量 CHHOTO_* 环境变量详解:配置机制、短链 Pair/UID 风格量化实测、307/308 跳转切换、协议白名单、大小写策略与存量兼容、WAL/ACID 组合矩阵与 getconfig 字段对照(2026-10-30 实测)。
Chhoto URL 7.10.3 配置参数详解
目标:本文是 Chhoto URL 的配置篇,给出 v7.10.3 全部
CHHOTO_*环境变量的口径、默认值与生效实测,覆盖短链生成风格、跳转语义、协议白名单、大小写策略、WAL/ACID 存储矩阵等核心配置组。全部结论基于容器实测与 v7.10.3 源码核对(2026-10-30),部署步骤见《Chhoto URL 7.10.3 Docker Compose 部署指南》,整体认知见《Chhoto URL 介绍与选型指南》。
一、配置机制总览
三个决定运维姿势的机制特性:
- 启动时一次性读取:所有
CHHOTO_*环境变量在进程启动时读入内存,运行期不会热更新。任何配置变更都要重建容器(docker compose up -d检测到环境变量变化会自动 recreate),实测重建后新配置立即生效。 - 两个官方核对入口:带认证的
GET /api/getconfig回显生效配置 JSON,是核对配置是否按预期加载的首选;启动日志也会逐项回显关键配置(站点地址、短链风格、WAL、ACID 级别等)。 - 旧变量名兼容:v7.10.3 仍兼容历史小写变量名(如
site_url、slug_style、redirect_method),命中旧名时启动日志打 WARN 提示升级;新配置一律用CHHOTO_前缀。
二、全量参数表
2.1 服务与前端
| 变量 | 默认值 | 说明 |
|---|---|---|
CHHOTO_LISTEN_ADDRESS | 0.0.0.0 | 监听地址;容器内通常不动,用端口映射收敛暴露面 |
CHHOTO_LISTEN_PORT | 4567 | 监听端口,改它不如改 compose 的端口映射 |
CHHOTO_SITE_URL | 未配置时 WARN | 对外访问地址;创建短链返回的 shorturl 前缀取自这里;自动去引号去尾斜杠;无 scheme 自动补 https://;scheme 非 http/https 时整条忽略 |
CHHOTO_CUSTOM_SITE_TITLE | — | 自定义站点标题 |
CHHOTO_CUSTOM_LANDING_DIRECTORY | — | 自定义落地页目录(需通过有效性校验);设置后管理台固定移到 /admin/manage/ |
CHHOTO_DISABLE_FRONTEND | False | 置 True 完全关闭网页前端只留 API |
CHHOTO_FRONTEND_PAGE_SIZE | 10(最小 1) | 管理界面分页大小 |
2.2 认证与身份
| 变量 | 默认值 | 说明 |
|---|---|---|
CHHOTO_PASSWORD | 未配置时 WARN | 管理密码;配合 CHHOTO_HASH_ALGORITHM=Argon2 时按 Argon2 哈希解析 |
CHHOTO_API_KEY | — | REST API 调用密钥(请求头 X-API-Key);明文且 base64url 解码不足 64 字节时启动 WARN 并打印一条建议密钥 |
CHHOTO_HASH_ALGORITHM | — | 置 Argon2 后密码与 API Key 都按 Argon2 哈希校验,日志不再出现明文 WARN |
CHHOTO_EXIT_ON_NO_AUTH | False | 置 True 且密码/OIDC 均未配置时进程直接退出(exit 1),防裸奔上公网 |
CHHOTO_OIDC_ISSUER_URL | — | OIDC 发行方地址;必须 https 且必须先配 CHHOTO_SITE_URL,否则忽略 |
CHHOTO_OIDC_CLIENT_ID / CHHOTO_OIDC_CLIENT_SECRET | — | OIDC 客户端凭证,依赖 issuer 已配置 |
CHHOTO_OIDC_CUSTOM_CLAIM | — | 格式 field=value,按 claim 限定允许登录的用户 |
CHHOTO_OIDC_EXTRA_ORIGINS | — | 逗号/空格分隔的额外回调 origin |
2.3 短链生成
| 变量 | 默认值 | 说明 |
|---|---|---|
CHHOTO_SLUG_STYLE | Pair | Pair=形容词-名词对;UID=随机字符串(其余任意值都回落 Pair) |
CHHOTO_SLUG_LENGTH | 8(最小 4) | UID 风格的长度;小于 4 的值被忽略回落默认 8 |
CHHOTO_TRY_LONGER_SLUG | False | 置 True 后 UID 冲突自动加长 4 位重试 |
CHHOTO_ALLOW_CAPITAL_LETTERS | False | 允许大写字母参与 UID 字符集与自定义别名 |
2.4 跳转与协议
| 变量 | 默认值 | 说明 |
|---|---|---|
CHHOTO_REDIRECT_METHOD | PERMANENT(308) | 仅字符串 TEMPORARY 会切到 307;跳转语义对比见部署篇实测 |
CHHOTO_EXTRA_PROTOCOLS | — | 追加长链协议白名单,逗号/空格分隔;只接受纯字母数字 token,含其他字符的整段跳过并 WARN |
默认白名单为 http、https、ftp、magnet 四种(启动日志回显实测:Allowed protocols: {"ftp", "magnet", "https", "http"})。
2.5 公开模式
| 变量 | 默认值 | 说明 |
|---|---|---|
CHHOTO_PUBLIC_MODE | 关闭 | 注意取值是 Enable 而不是 True——只有字符串 Enable 才开启公开模式,写 True 无效 |
CHHOTO_PUBLIC_MODE_EXPIRY_DELAY | 0(不强制) | 大于 0 的秒数:公开模式下所有新建短链被强制加上该到期时间 |
2.6 SQLite 存储
| 变量 | 默认值 | 说明 |
|---|---|---|
CHHOTO_DB_URL | /data/urls.sqlite | 数据库文件路径;旧版根目录 /urls.sqlite 会自动迁移并留 .bak |
CHHOTO_SQLITE_USE_WAL_MODE | False(WARN 建议 WAL) | 置 True 开 WAL 日志模式,原理与调优可参考《SQLite PRAGMA 与配置调优详解》 |
CHHOTO_SQLITE_ENSURE_ACID | True | 置 False 放弃 ACID 换吞吐,synchronous 级别随之变化(见 3.5) |
CHHOTO_DISABLE_BACKUPS | False | 置 True 关闭自动备份(启动 WARN),接管为外部备份任务 |
三、核心参数实测
3.1 短链风格:Pair 与 UID 的量化差异
v7.10.3 源码口径:Pair 风格词表为 108 个形容词 × 241 个名词 = 26028 种组合(与 Docker 容器命名同源的词表风格),实测自动生成 buck-elastic 这类易读短链;这正是官方「数千条短链就改 UID」建议的量化依据。UID 风格基于 nanoid:
| 配置组合 | 字符集 | 实测输出 |
|---|---|---|
| Pair(默认) | 形容词-名词对 | buck-elastic |
UID + 长度 12 + 不允许大写 | 36 字符(a-z0-9) | — |
UID + 长度 12 + CHHOTO_ALLOW_CAPITAL_LETTERS=True | 58 字符(大小写+数字,排除易混淆的 I/O/0/l) | pA6TgpoYp4Ug |
3.2 跳转方法切换
同一环境在 TEMPORARY 与默认 PERMANENT 间切换实测:TEMPORARY 时访问短链返回 307,重建为默认 PERMANENT 后同一短链返回 308——配置确实在进程启动时一次性生效,切换即意味着一次容器重建。
3.3 协议白名单
实测 CHHOTO_EXTRA_PROTOCOLS=tel 后重建:
# tel: 已入白名单,建链成功
curl -s -X POST -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"longlink": "tel:+8612345678901", "shortlink": "call-test"}' http://localhost:8130/api/new
# → {"success":true,...,"shorturl":"http://192.168.1.200:8130/call-test",...}
# file: 在白名单外,被 400 拒绝
curl -s -w " [%{http_code}]" -X POST ... -d '{"longlink": "file:///etc/passwd", ...}'
# → {"success":false,"error":true,"reason":"Invalid longlink!"} [HTTP 400]
3.4 大小写策略与存量兼容
实测 CHHOTO_ALLOW_CAPITAL_LETTERS=True 时创建大写别名 Test-Link 成功;随后把配置恢复为 False 并重建容器,存量链的访问行为:
GET /Test-Link → 307(存量大写别名照常跳转)
GET /test-link → 404(查询大小写敏感,小写变体不存在)
结论:大小写开关只约束新建与删除时的别名合法性校验,不影响存量数据的精确匹配跳转。上生产前想清楚要不要开大写——关掉更省心,别名大小写混用是排错重灾区。
3.5 WAL/ACID 组合矩阵
CHHOTO_SQLITE_USE_WAL_MODE 与 CHHOTO_SQLITE_ENSURE_ACID 的四种组合对应不同的 synchronous PRAGMA 级别(源码口径,启动日志实测其中两种):
| WAL 模式 | ENSURE_ACID | synchronous 级别 | 启动日志 |
|---|---|---|---|
| True | True(默认) | FULL | Ensuring ACID compliance, using synchronous pragma: FULL. |
| True | False | NORMAL | Not ensuring ACID compliance, using synchronous pragma: NORMAL. |
| False | True | EXTRA | — |
| False | False | FULL | — |
默认组合(WAL + ACID)即本专栏部署篇实测所用;不开启 WAL 时启动日志会 WARN Using DELETE journaling mode for database. WAL mode is recommended.。
3.6 过期短链的自动清理
实测证据:早前创建的一条带 expiry_time 的短链在配置变更重建容器后从 /api/all 中消失——过期短链由每小时一轮的后台清理服务(启动日志 Starting database cleanup service, will run once every hour.)在容器启动与整点清理。CHHOTO_PUBLIC_MODE_EXPIRY_DELAY 强制的到期时间走同一清理通道。
四、/api/getconfig 字段对照
GET /api/getconfig(需认证)回显的 JSON 字段与环境变量对应关系(实测原文):
{"version":"7.10.3","site_url":"http://192.168.1.200:8130","allow_capital_letters":true,
"public_mode":false,"public_mode_expiry_delay":0,"allowed_protocols":["magnet","ftp","http","tel","https"],
"slug_style":"UID","slug_length":12,"try_longer_slug":true,"frontend_page_size":10}
| 字段 | 对应变量 |
|---|---|
version | 内置版本号(与 /api/version 一致) |
site_url | CHHOTO_SITE_URL |
allow_capital_letters | CHHOTO_ALLOW_CAPITAL_LETTERS |
public_mode / public_mode_expiry_delay | CHHOTO_PUBLIC_MODE / CHHOTO_PUBLIC_MODE_EXPIRY_DELAY |
allowed_protocols | 默认白名单 + CHHOTO_EXTRA_PROTOCOLS |
slug_style / slug_length / try_longer_slug | CHHOTO_SLUG_STYLE / CHHOTO_SLUG_LENGTH / CHHOTO_TRY_LONGER_SLUG |
frontend_page_size | CHHOTO_FRONTEND_PAGE_SIZE |
注意 getconfig 不回显密码/API Key/OIDC 等敏感项,适合放进部署验收清单而无泄露风险。
五、配置变更实操流程
实测推荐流程(一次完整往返):
# 1. 改 compose 环境(或叠加 override 文件)
vim compose.yaml
# 2. 重建(环境变量变化会自动 recreate,数据卷不动)
docker compose up -d
# 3. 日志确认关键配置行
docker logs chhoto-url-7.10.3-web | grep -E "redirection|slugs|protocols|pragma|journaling"
# 4. 接口确认生效配置
curl -s -H "X-API-Key: $API_KEY" http://localhost:8130/api/getconfig
本次实测同卷重建往返两轮(Pair/307 → UID/308/tel → 恢复 Pair/307),6 条短链与命中计数全程无损——配置变更不需要备份恢复,数据在 named volume 里与容器无关。
六、易错点清单
| 易错点 | 说明 |
|---|---|
CHHOTO_PUBLIC_MODE=True 不生效 | 取值必须是字面量 Enable,写 True 等于没开 |
CHHOTO_SLUG_LENGTH=2 不生效 | 最小 4,更小值被静默忽略回落 8 |
CHHOTO_SITE_URL=example.com | 无 scheme 自动补 https://;带非法 scheme(如 ftp://)整条忽略并回退未配置 |
| OIDC 配了没反应 | CHHOTO_OIDC_ISSUER_URL 必须 https 且必须先配 CHHOTO_SITE_URL,二者缺一该配置组整体失效 |
| 改了环境变量没变化 | 配置不热更新,需 docker compose up -d 重建容器 |
| API Key 启动 WARN | 明文 Key base64url 解码不足 64 字节视为不安全,按 WARN 里打印的建议值换新 |
CHHOTO_EXTRA_PROTOCOLS=http+ss 被跳过 | 白名单 token 只接受纯字母数字,含 +、: 等符号的段落丢弃并 WARN |
七、本专栏系列导航
- 认知与选型:《Chhoto URL 介绍与选型指南》
- 部署实操:《Chhoto URL 7.10.3 Docker Compose 部署指南》
- REST API 的完整端点与调用实测见本专栏下一篇(撰写中)。