YOURLS 1.10.6 配置参数详解
YOURLS 1.10.6 配置参数详解:config.php 参数全集与容器环境变量映射、数据库/站点/短码/认证/运维五类参数逐项说明、生产配置模板与实测验证。
YOURLS 1.10.6 配置参数详解
> 目标:逐项讲清 YOURLS 1.10.6 的全部配置参数——user/config.php 的官方样例全集、容器形态的环境变量映射,以及源码中可用的进阶常量,每项配默认值、取值说明与实测验证。本文基于 2026-10-30 在 Ubuntu 22.04 服务器上的 1.10.6 实例(部署过程见 《YOURLS 1.10.6 Docker Compose 部署指南》)实测与官方源码实查写成。
一、环境信息
- 操作系统:Ubuntu 22.04(IP 192.168.1.200);
- YOURLS:1.10.6(官方镜像内 Apache 2.4.69 + PHP 8.5.12),数据库 MySQL 8.0;
- 配置载体:容器形态为 compose
environment环境变量(实例实测),裸机形态为user/config.php; - 参数依据:官方源码包
user/config-sample.php(97 行,tag 1.10.6,2026-10-30 自 codeload.github.com 下载)、官方镜像实际生成的user/config.php、源码includes/Config/与includes/functions-*.php中的常量定义点; - 演示账号:
admin/q1w2e3r4。
二、前置条件
- 已完成一份可运行的 YOURLS 1.10.6 部署(容器或裸机均可,部署步骤见 《YOURLS 1.10.6 Docker Compose 部署指南》);
- 理解两个配置入口的关系:容器形态下
user/config.php由官方镜像 entrypoint 根据环境变量生成(内容是读取YOURLS_*环境变量的 PHP 代码),改配置应改 compose 的environment后重启;裸机形态下user/config.php是唯一配置文件,直接编辑生效(无需重启 Web 服务,PHP 每次请求重新加载)。
三、参数查看与修改方式
3.1 查看当前生效配置
裸机/通用形态:直接读实例的配置文件(容器内路径 /var/www/html/user/config.php):
cat /opt/yourls/user/config.php
实测回显(官方镜像 1.10.6 生成的容器版配置,节选核心段):
define( 'YOURLS_DB_USER', getenv_container('YOURLS_DB_USER', 'root') );
define( 'YOURLS_DB_PASS', getenv_container('YOURLS_DB_PASS') );
define( 'YOURLS_DB_NAME', getenv_container('YOURLS_DB_NAME', 'yourls') );
define( 'YOURLS_DB_HOST', getenv_container('YOURLS_DB_HOST', 'mysql') );
define( 'YOURLS_DB_PREFIX', getenv_container('YOURLS_DB_PREFIX', 'yourls_') );
define( 'YOURLS_SITE', getenv_container('YOURLS_SITE', 'https://your-own-domain-here.com') );
define( 'YOURLS_HOURS_OFFSET', filter_var(getenv('YOURLS_HOURS_OFFSET'), FILTER_VALIDATE_INT) ?: 0 );
define( 'YOURLS_LANG', getenv('YOURLS_LANG') ?: '' );
define( 'YOURLS_UNIQUE_URLS', getenv('YOURLS_UNIQUE_URLS') === false ?: filter_var(getenv('YOURLS_UNIQUE_URLS'), FILTER_VALIDATE_BOOLEAN) );
define( 'YOURLS_PRIVATE', getenv('YOURLS_PRIVATE') === false ?: filter_var(getenv('YOURLS_PRIVATE'), FILTER_VALIDATE_BOOLEAN) );
define( 'YOURLS_COOKIEKEY', getenv('YOURLS_COOKIEKEY') ?: '61b8b08a4a045282f19d73274a9813e391b56fd4' );
$yourls_user_passwords = [
getenv_container('YOURLS_USER') => getenv_container('YOURLS_PASS'),
];
define( 'YOURLS_URL_CONVERT', filter_var(getenv('YOURLS_URL_CONVERT'), FILTER_VALIDATE_INT) ?: 36 );
define( 'YOURLS_DEBUG', filter_var(getenv('YOURLS_DEBUG'), FILTER_VALIDATE_BOOLEAN) );
define( 'YOURLS_NO_VERSION_CHECK', getenv('YOURLS_NO_VERSION_CHECK') === false ?: filter_var(getenv('YOURLS_NO_VERSION_CHECK'), FILTER_VALIDATE_BOOLEAN) );
define( 'YOURLS_NOSTATS', filter_var(getenv('YOURLS_NOSTATS'), FILTER_VALIDATE_BOOLEAN) );
可见官方镜像把每个参数的真实默认值都写进了生成逻辑(如 YOURLS_URL_CONVERT 默认 36、YOURLS_HOURS_OFFSET 默认 0),这正是本文参数总览的默认值依据。
3.2 修改参数(容器形态)
改 compose 的 environment 后重建服务:
cd /opt/yourls/compose
docker compose up -d
实测回显(本文在实验中把 YOURLS_UNIQUE_URLS 置 false、YOURLS_URL_CONVERT 置 62 后重建):
Container yourls-1.10.6-web Starting
Container yourls-1.10.6-web Started
3.3 修改参数(裸机形态)
编辑 user/config.php 对应行保存即可(PHP-FPM/Apache mod_php 每次请求都会重新读取,无需重启服务;如装了 OPcache 预加载需另行刷新)。修改后验证方式:刷新管理后台,或用 API 触发一次读配置的行为(如创建短链观察短码进制变化)。
四、参数总览
YOURLS 1.10.6 的全部用户可配置参数(来源:config-sample.php 全集 + 官方镜像生成配置 + 源码 defined() 检查点,2026-10-30 实查):
| 参数 | 类型 | 默认值 | 作用域 |
|---|---|---|---|
YOURLS_DB_USER | 常量 | root | 数据库连接 |
YOURLS_DB_PASS | 常量 | 空 | 数据库连接 |
YOURLS_DB_NAME | 常量 | yourls | 数据库连接 |
YOURLS_DB_HOST | 常量 | localhost | 数据库连接 |
YOURLS_DB_PREFIX | 常量 | yourls_ | 数据库连接 |
YOURLS_SITE | 常量 | 无(必填) | 站点 |
YOURLS_LANG | 常量 | 空 | 站点 |
YOURLS_HOURS_OFFSET | 常量 | 0 | 站点 |
YOURLS_URL_CONVERT | 常量 | 36 | 短码 |
YOURLS_UNIQUE_URLS | 常量 | true | 短码 |
$yourls_reserved_URL | 数组 | 7 个敏感词 | 短码 |
YOURLS_PRIVATE | 常量 | true | 认证安全 |
$yourls_user_passwords | 数组 | 空(必填) | 认证安全 |
YOURLS_COOKIEKEY | 常量 | 自动随机 | 认证安全 |
YOURLS_NO_HASH_PASSWORD | 常量 | 未定义(false) | 认证安全(进阶) |
YOURLS_DEBUG | 常量 | false | 运维开关 |
YOURLS_NO_VERSION_CHECK | 常量 | true(容器) | 运维开关 |
YOURLS_NOSTATS | 常量 | false | 运维开关 |
YOURLS_FAST_INIT | 常量 | 未定义(false) | 运维开关(进阶) |
YOURLS_CONFIGFILE | 常量 | 未定义(自动定位) | 运维开关(进阶) |
💡 说明:
YOURLS_SITE与$yourls_user_passwords是仅有的两个必填项——缺了它们 YOURLS 拒绝运行;其余参数均有合理默认值。表中「常量」指 config.php 里的define()项,「数组」指 PHP 数组赋值项。
五、核心参数分类详解
5.1 数据库连接参数(5 项)
官方样例原文(config-sample.php):
/** MySQL database username */
define( 'YOURLS_DB_USER', 'your db user name' );
/** MySQL database password */
define( 'YOURLS_DB_PASS', 'your db password' );
/** The name of the database for YOURLS
** Use lower case letters [a-z], digits [0-9] and underscores [_] only */
define( 'YOURLS_DB_NAME', 'yourls' );
/** MySQL hostname.
** If using a non standard port, specify it like 'hostname:port', e.g. 'localhost:9999' or '127.0.0.1:666' */
define( 'YOURLS_DB_HOST', 'localhost' );
/** MySQL tables prefix
** YOURLS will create tables using this prefix (eg `yourls_url`, `yourls_options`, ...)
** Use lower case letters [a-z], digits [0-9] and underscores [_] only */
define( 'YOURLS_DB_PREFIX', 'yourls_' );
逐项说明:
YOURLS_DB_USER/YOURLS_DB_PASS:连接凭据。官方镜像默认用户root;独立业务账号是更安全的做法(本文实例用yourls/q1w2e3r4);YOURLS_DB_NAME:库名,仅允许小写字母、数字、下划线(官方注释原文约束);YOURLS_DB_HOST:主机名,非标端口直接用host:port形式(官方注释给出localhost:9999示例),没有独立的 DB_PORT 参数——这是 YOURLS 与多数软件不同的一点;YOURLS_DB_PREFIX:表前缀,决定建出来的三张表名。实测本实例为默认值yourls_,库内实际表结构:
docker exec yourls-1.10.6-mysql sh -c 'mysql -uyourls -pq1w2e3r4 yourls -e "SHOW TABLES; DESCRIBE yourls_url;"'
实测回显:
Tables_in_yourls
yourls_log
yourls_options
yourls_url
Field Type Null Key Default Extra
keyword varchar(100) NO PRI
url text NO MUL NULL
title text YES NULL
timestamp timestamp NO MUL CURRENT_TIMESTAMP DEFAULT_GENERATED
ip varchar(41) NO MUL NULL
clicks int unsigned NO NULL
💡 技术拓展:表前缀的实际价值不是「安全混淆」而是一库多应用——同一 MySQL 库里跑多套独立 YOURLS 实例时,用不同前缀(如
site1_/site2_)即可隔离表集。keyword 主键长度varchar(100)意味着短码最长可到 100 字符,日常远用不满。
5.2 站点参数(3 项)
/** YOURLS installation URL
** All lowercase, no trailing slash at the end.
** If you define it to "https://sho.rt", don't use "https://www.sho.rt" in your browser (and vice-versa) */
define( 'YOURLS_SITE', 'https://your-own-domain-here.com' );
/** YOURLS language ... That translation file (a .mo file) must be installed in the user/language directory. */
define( 'YOURLS_LANG', '' );
define( 'YOURLS_HOURS_OFFSET', 0 ); // 容器生成配置含此项,样例文件未列
逐项说明:
YOURLS_SITE:全小写、末尾无斜杠(官方注释原文),它决定所有生成短链的 URL 前缀。官方注释特别提醒:定义为https://sho.rt后就不要用https://www.sho.rt访问——域名不一致会导致登录会话与跳转异常(部署篇 Q2 的排障实录即为此问题);YOURLS_LANG:语言代码,对应的.mo翻译文件需放入user/languages/目录(官方注释写user/language,实际目录名为user/languages,以源码YOURLS_LANG_DIR定义为准);YOURLS_HOURS_OFFSET:时间显示的时区偏移小时数,整数;默认 0(UTC)。展示统计时间与东八区一致可设为 8。
5.3 短码参数(3 项)
/** Allow multiple short URLs for a same long URL
** Set to true to have only one pair of shortURL/longURL (default YOURLS behavior)
** Set to false to allow multiple short URLs pointing to the same long URL (bit.ly behavior) */
define( 'YOURLS_UNIQUE_URLS', true );
/** URL shortening method: either 36 or 62
** 36: generates all lowercase keywords (ie: 13jkm)
** 62: generates mixed case keywords (ie: 13jKm or 13JKm) */
define( 'YOURLS_URL_CONVERT', 36 );
/** Reserved keywords (so that generated URLs won't match them) */
$yourls_reserved_URL = [
'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick',
];
逐项说明:
YOURLS_UNIQUE_URLS:true(默认)时同一长 URL 全局只允许一条短链,重复创建返回 409(1.10.5 起的状态码);false时同一长链可有多条短链(官方注释称为「bit.ly behavior」)。实测验证:设false后连建三条不同短链成功(逐条创建,仅url参数不同):
curl -s "http://192.168.1.200:8134/yourls-api.php" \
--data-urlencode 'url=https://example.org/test-1' \
--data-urlencode 'action=shorturl' --data-urlencode 'format=json' \
--data-urlencode 'username=admin' --data-urlencode 'password=q1w2e3r4'
curl -s "http://192.168.1.200:8134/yourls-api.php" \
--data-urlencode 'url=https://example.org/test-2' \
--data-urlencode 'action=shorturl' --data-urlencode 'format=json' \
--data-urlencode 'username=admin' --data-urlencode 'password=q1w2e3r4'
curl -s "http://192.168.1.200:8134/yourls-api.php" \
--data-urlencode 'url=https://example.org/test-3' \
--data-urlencode 'action=shorturl' --data-urlencode 'format=json' \
--data-urlencode 'username=admin' --data-urlencode 'password=q1w2e3r4'
实测回显(提取 status 与 shorturl 字段,注意自动短码是顺序递增的):
success http://192.168.1.200:8134/1
success http://192.168.1.200:8134/2
success http://192.168.1.200:8134/3
YOURLS_URL_CONVERT:自动短码的进制,只允许 36 或 62。36 进制生成全小写短码(样例13jkm),62 进制区分大小写(样例13jKm),短码空间更大。上例实测 62 进制下首条短码为1——因为 YOURLS 自动短码是自增 ID 的进制编码,从 1 起步,想要随机短码需插件实现;$yourls_reserved_URL:保留字数组,命中保留字的短码不可用(防止短链与后台路径如admin冲突或被恶意词占用)。生产环境建议把admin、api、logout等应用路径加进去。
5.4 认证与安全参数(4 项)
/** Private means the Admin area will be protected with login/pass as defined below.
** Set to false for public usage (eg on a restricted intranet or for test setups) */
define( 'YOURLS_PRIVATE', true );
/** A random secret hash used to encrypt cookies. You don't have to remember it, make it long and complicated
** Hint: copy from https://yourls.org/cookie */
define( 'YOURLS_COOKIEKEY', 'modify this text with something random' );
/** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes */
$yourls_user_passwords = [
'username' => 'password',
];
逐项说明:
YOURLS_PRIVATE:true(默认)= 私密模式,管理后台需登录、API 需凭据;false= 公开模式,任何人可缩短链接(官方注释建议仅限内网或测试)。公开模式下 API 的username/password参数不再必需;$yourls_user_passwords:账号数组,支持多账号(一个键值对一个账号)。明文密码在首次登录后会被 YOURLS 自动加密为哈希写回文件(官方特性);本文演示实例通过容器 env 注入admin => q1w2e3r4;YOURLS_COOKIEKEY:cookie 加密盐。1.10.5 起未显式定义时自动生成不可预测值(实测容器实例自动生成了 40 位随机串61b8b08a…);裸机部署建议从 https://yourls.org/cookie 取一个随机值固定下来——固定盐的必要性:若每次部署重新随机,所有用户会话失效;YOURLS_NO_HASH_PASSWORD(进阶):源码functions-auth.php定义点注释表明,设为true可跳过密码哈希(保持明文),官方文档对应章节为 credentials 的「I don't want to encrypt my password」。除特殊集成需求外不建议开启。
5.5 运维开关参数(4 项)
YOURLS_DEBUG:默认false。开启后页面输出内部调试信息,官方注释明确「Default is false for live site. Enable when coding or before submitting a new issue」——排障临时开、平时必关;YOURLS_NO_VERSION_CHECK:是否禁用版本更新检查(后台每日向官方查询新版本)。容器生成配置默认true(禁用检查,适合内网/低外网依赖场景);YOURLS_NOSTATS:源码functions.php注释原文「Logs redirects unless YOURLS_NOSTATS is defined and true」——置true后跳转不记录点击日志(yourls_log表不再增长),适合超高频纯跳转场景(代价是失去点击统计);YOURLS_FAST_INIT(进阶):源码Config/Init.php的注释为「Whether to end instantiating early if YOURLS_FAST_INIT is defined and true」——初始化流程提前收敛,跳过插件等非核心加载,配合轻量入口可微降开销,普通站点无需启用。
六、生产配置模板
以下为裸机形态的生产 config.php 完整模板(适用场景:2C4G 及以上的常规云主机、NVMe/SSD 磁盘、个人或团队级日均十万级跳转;演示账号 admin/q1w2e3r4,站点域名以 s.example.com 为例):
<?php
// ---- 数据库连接:独立业务账号 + 非标端口示例 ----
define( 'YOURLS_DB_USER', 'yourls' );
define( 'YOURLS_DB_PASS', 'q1w2e3r4' );
define( 'YOURLS_DB_NAME', 'yourls' );
define( 'YOURLS_DB_HOST', '127.0.0.1:3306' );
define( 'YOURLS_DB_PREFIX', 'yourls_' );
// ---- 站点:域名必须与实际访问一致 ----
define( 'YOURLS_SITE', 'https://s.example.com' );
define( 'YOURLS_LANG', 'zh_CN' );
define( 'YOURLS_HOURS_OFFSET', 8 );
// ---- 短码:62 进制 + 允许同链多码 ----
define( 'YOURLS_UNIQUE_URLS', false );
define( 'YOURLS_URL_CONVERT', 62 );
$yourls_reserved_URL = [
'porn', 'sex', 'fuck',
'admin', 'api', 'images', 'css', 'js', 'logout',
];
// ---- 认证安全:私密模式 + 多账号 + 固定 cookie 盐 ----
define( 'YOURLS_PRIVATE', true );
define( 'YOURLS_COOKIEKEY', 'F5gR9wL2pQ7xTz4Kc8Vb1Nm6Hj3Ys0Dd' );
$yourls_user_passwords = [
'admin' => 'q1w2e3r4',
];
// ---- 运维开关:生产保持调试关闭 ----
define( 'YOURLS_DEBUG', false );
define( 'YOURLS_NO_VERSION_CHECK', true );
模板要点解读:数据库用独立账号而非 root;YOURLS_DB_HOST 演示了带端口的写法;$yourls_reserved_URL 补入了后台与静态资源路径,避免自动/自选短码撞上应用路由;cookie 盐为 32 位随机串(生产请换成 https://yourls.org/cookie 生成的值);YOURLS_NO_VERSION_CHECK 关闭外联检查。容器形态等价 compose environment 写法见部署篇第六节环境变量表,两份配置一一对应(YOURLS_HOURS_OFFSET、YOURLS_COOKIEKEY 等在 compose 里同名传递即可)。
与同类短链产品的配置面横向对比(延伸阅读):《Shlink 5.1.8 配置参数详解》展示了现代短链的 env 全量配置风格,《Chhoto URL 7.10.3 配置参数详解》则是极简派代表——YOURLS 的 config.php 模式介于两者之间:参数少而稳,17 年未大改。
七、常见问题
Q1:改了 config.php 没生效?
容器形态改了文件会被 env 生成逻辑覆盖或与 env 冲突——容器化配置唯一入口是 environment,改后 docker compose up -d 重建;裸机形态确认改的是 user/config.php(不是 config-sample.php),且文件无语法错误(php -l user/config.php 校验)。
Q2:登录提示密码错误?
裸机形态明文密码首次登录后会被加密写回,之后 config 里看到的是一长串哈希,属正常现象;密码记错时直接把 $yourls_user_passwords 里对应项改回明文即可重置。容器形态密码以 env YOURLS_PASS 为准。
Q3:YOURLS_SITE 与实际访问域名不一致会怎样?
登录后 301 回跳导致会话失效(部署篇 Q2 实录)、生成的短链前缀与实际域名不符。唯一解法:两者保持完全一致。
Q4:想让自动短码是随机串怎么办?
YOURLS_URL_CONVERT 只控制进制(36/62),自动短码始终是自增 ID 编码(实测首条为 1)。随机短码需要社区插件实现(如 random-keywords 类插件,官方 awesome 列表有收录)。
Q5:yourls_log 表太大想停止记录?
YOURLS_NOSTATS 置 true 可停止写入跳转日志(代价:点击统计失效);更细的折衷是保留统计但定期归档该表。
八、参考链接
- 官方配置文档:https://yourls.org/docs/guide/essentials/configuration
- 官方凭据文档(密码哈希/明文开关):https://yourls.org/docs/guide/essentials/credentials
- cookie 盐生成:https://yourls.org/cookie
- 源码包(config-sample.php 依据):https://github.com/YOURLS/YOURLS
- 站内关联:《YOURLS 1.10.6 Docker Compose 部署指南》(环境变量表)、《YOURLS 1.10.6 介绍与选型指南》(参数背后的架构取舍)、《YOURLS 1.10.6 API 使用详解》(API 认证凭据与参数联动)