Algernon 1.17.12 配置参数详解
Algernon 1.17.12 全部 66 个命令行参数的功能、默认值与实测行为详解,含 serverconf.lua 配置、参数组合实战、启动横幅速查与排障实录。
Algernon 1.17.12 配置参数详解
目标:给需要调优、加固或嵌入 Algernon 的运维/开发人员一份完整的参数参考——覆盖
algernon --help全部 66 个参数拼写(20 个短参数、46 个长参数)的含义、默认值与实测行为,并给出serverconf.lua配置入口、参数组合场景与排障沉淀。本文所有「实测」标注的输出均来自 Ubuntu 24.04.5 LTS 服务器上 Algernon 1.17.12 的真实运行回显(已略去终端配色转义符),安装方法见 《Ubuntu 24.04 安装 Algernon 1.17.12 指南》。
一、环境信息
本篇实测环境与工具:
- 操作系统:Ubuntu 24.04.5 LTS(x86_64)
- 软件:Algernon 1.17.12(官方静态二进制,
/usr/local/bin/algernon) - 依赖组件:Redis 7.x(
--redis验证时本机redis-server提供 6379 端口)、OpenSSL 3.x(自签证书)、curl 8.5.0(HTTP 验证) - 参数全集取证:
algernon --help输出 125 行,本篇逐行核对 - 站点目录:
/srv/algernon(含 index.lua / index.md / style.gcss 等演示文件)
版本与帮助输出确认:
algernon --version
algernon --help | wc -l
实测输出:
Algernon 1.17.12
125
二、配置体系总览
Algernon 官方声明「起步不需要任何配置文件」,实际提供三层配置入口,优先级从高到低:
- 命令行参数:
algernon [flags] [要服务的文件或目录] [主机][:端口],显式传参优先级最高(实测:serverconf.lua中SetAddr(":3999")会被命令行位置参数:3099覆盖); - serverconf.lua:用 Lua 函数做服务器级配置,通过
--conf指定(见第四章); - 内置默认值:监听
:3000、缓存 On、限流 10 请求/秒/客户端、数据库自动回落 BoltDB。
不带任何参数的默认启动横幅(实测,ANSI 转义已略去):
Algernon
1.17.12
Web Server
-------------------------------------------------
Server directory: .
Database: Bolt (/tmp/algernon.db)
Options: [NonInteractive]
Cache mode: On
Cache size: 1048576 bytes
Request limit: 10/sec per visitor
Large file threshold: 44040192 bytes
Large file timeout: 10 sec
Listening for: HTTP localhost 3000 plain
time="2026-10-23T20:01:35Z" level=info msg="Serving HTTP on http://localhost:3000/"
横幅是参数生效情况的「速查面板」:Database 反映数据库后端选择、Cache mode/size 反映缓存配置、Request limit 反映限流、Options 反映模式开关组合、Listening for 反映协议与端口。改完参数看横幅,是最快的验证方式。
三条默认值必须先记住(后续表格反复引用):
| 项 | 默认值 |
|---|---|
| 监听地址 | :3000(IPv6 写法 [::1]:3000) |
| 数据库 | 先尝试 Redis :6379,连不上自动回落 BoltDB(临时库);--bolt 落到 /tmp/algernon.db |
| 限流 | 每客户端 10 请求/秒;--dev 模式下 700 请求/秒 |
⚠️ 注意:官方 README 写「默认使用 Redis,无 Redis 时回落 Bolt」,实测无 Redis 时横幅显示
Bolt, temporary(临时内存库),重启丢登录态与缓存元数据;用--boltdb或--bolt指定文件后才持久化。
三、命令行参数详解
按功能分 10 组覆盖 --help 全部 66 个参数拼写。每组表格给出「参数 | 作用(官方 help 原文意译)| 默认/说明」,实测证据以「✅ 实测」标注。
3.1 监听与基础语法
语法(help 原文):algernon [flags] [file or directory to serve] [host][:port],IPv6 地址必须带方括号。
| 参数 | 作用 | 默认/说明 |
|---|---|---|
--addr=[HOST][:PORT] | 服务监听地址与端口 | :3000;✅ 实测 --addr=:3000 生效 |
--http-addr=[HOST][:PORT] | 非 TLS HTTP 监听地址 | 与 --https-addr 配合拆分双端口;✅ 实测 --http-addr=:3081 生效 |
--https-addr=[HOST][:PORT] | TLS HTTPS 监听地址 | 需同时给 --cert/--key;✅ 实测生效 |
--dir=DIRECTORY | 显式设置服务目录 | 等价于位置参数;✅ 实测 --dir=/srv/files 横幅显示 Server directory: srv/files |
-h, --help | 帮助 | 全部 66 个参数一览(125 行) |
-v, --version | 名称与版本 | ✅ 实测输出 Algernon 1.17.12 |
3.2 运行模式开关
模式参数会成组改写多个底层选项,横幅 Options 字段直接显示组合结果:
| 参数 | 作用(help 原文要点) | 实测效果 |
|---|---|---|
-e, --dev | 开发模式:Debug + 常规 HTTP + Bolt + 缓存 dev + 限流 700/s | ✅ 横幅 Options: [Debug, Dev, NonInteractive]、Cache mode: Development、Request limit: 700/sec per visitor、Database: Bolt, temporary |
-p, --prod | 生产模式:HTTP/2+HTTPS 走 443、HTTP 走 80、目录用 /srv/algernon、关 Debug/自动刷新、强制非交互、缓存 prod | ✅ 实测强制监听 80/443,并找 /etc/algernon/cert.pem;无证书时 level=error |
-x, --simple | 常规 HTTP + 非交互 + 关闭一切需要数据库的功能 | ✅ 横幅 Options: [NonInteractive]、Database: Disabled、Request limit: Off;-x 下传 --limit 仍显示 Off |
-s, --noninteractive | 关闭 Debug 与交互式终端 | ✅ 后台/systemd 必加;不加时 stdin 关闭进程即退出 |
-d, --debug | Debug(浏览器里直接显示错误) | --dev 已包含 |
-t, --httponly | 只走常规 HTTP | 有证书时默认 HTTPS+HTTP/2,-t 可强制回落 |
-q, --quiet | stdout/stderr 全静默 | ✅ 实测日志文件 0 字节,服务照常 200 响应 |
-n, --nobanner | 不显示启动横幅 | ⚠️ 实测 1.17.12 横幅仍打印(与 help 描述不符),求静默用 -q |
-V, --verbose | 更详细的日志 | 缓存命中也会记录 |
-z, --quit | 服务完第一个请求即退出 | -m 的组成之一 |
-o, --open=EXECUTABLE | 启动后用浏览器打开服务地址 | 无桌面环境的服务器可显式关闭 |
--nobrowser | 禁止自动开浏览器 | 同上,服务端常备 |
3.3 协议选择(HTTP/1.1、HTTP/2、HTTP/3)
| 参数 | 作用 | 实测 |
|---|---|---|
--cert=FILENAME | TLS 证书路径 | ✅ 实测 --cert=/tmp/cert.pem --key=/tmp/key.pem 启用 HTTPS |
--key=FILENAME | TLS 私钥路径 | 同上 |
--http2only | 无 TLS 的 HTTP/2(h2c) | ✅ 启动时告警 Serving HTTP/2 without HTTPS (not recommended!);curl --http2-prior-knowledge 实测可通 |
-u | 走 QUIC / HTTP3 | ✅ 实测无证书时先打印 Serving HTTP/3 (QUIC) on https://localhost:3061/ 随即 Not serving QUIC after all. Error: open cert.pem: no such file or directory 回落 HTTP;给证书后成功 |
-r, --redirect | 同时启用 HTTP/HTTPS 时把 HTTP 重定向到 HTTPS | ✅ 实测与证书组合正常启动 |
--servername=STRING | 自定义 Server 响应头 | ✅ 实测 --servername=MyEdge/1.0 后 curl -D- 可见 Server: MyEdge/1.0;注意 -x 模式下响应头里没有 Server 字段 |
3.4 数据库后端
默认策略:尝试 Redis :6379 → 失败回落 BoltDB。实测证据齐备:
| 参数 | 作用 | 实测 |
|---|---|---|
--redis=[HOST][:PORT] | 用 Redis 做数据库后端 | ✅ 无实例时横幅 Testing redis connection → Redis connection failed → Database: Bolt, temporary;本机起 redis-server 后横幅 Database: Redis |
--dbindex=INDEX | Redis 数据库编号 | 默认 0 |
-b, --bolt | 用 /tmp/algernon.db | ✅ 横幅 Bolt (/tmp/algernon.db) |
--boltdb=FILENAME | 指定 Bolt 文件路径 | ✅ systemd 托管用 --boltdb=/var/lib/algernon/algernon.db(配 StateDirectory) |
--sqlite=FILENAME | 用 SQLite 文件 | ✅ 实测横幅 Database: SQLite |
--maria=DSN | MariaDB/MySQL 主机库 | DSN 形如 host:port/db |
--mariadb=NAME | MariaDB/MySQL 库名 | 配合 --maria |
--postgres=DSN | PostgreSQL 主机库 | 服务端需 9.1+(HSTORE) |
--postgresdb=NAME | PostgreSQL 库名 | 配合 --postgres |
--nodb | 不要数据库 | help 注明等价 --boltdb=/dev/null;✅ 实测横幅 Database: Disabled |
--connectionstring=… | 自定义连接串 | 特殊后端时使用 |
3.5 缓存控制
| 参数 | 作用 | 实测 |
|---|---|---|
--cache=MODE | 六种缓存模式:on(全缓存,默认)/dev(跳过 Amber、Lua、GCSS、Markdown、JSX)/prod(跳过 Amber、Lua)/small(同 prod 但只缓存 ≤64KB)/images(只图片)/off | ✅ 实测四种横幅:On、Development(--dev)、Production(--cache=prod)、Small、Images、Off(--nocache) |
--cachesize=N | 缓存总大小(字节) | 默认横幅 1048576(1MB);✅ 实测 --cachesize 67108864 后横幅同步 |
--nocache | 等价 --cache=off | ✅ 横幅 Cache mode: Off,Cache size 行消失 |
--rawcache | 关闭缓存压缩 | ✅ 横幅 Options: [RawCache] |
-c, --statcache | 缓存 os.Stat 结果 | 仅当文件不会删除时使用;✅ 横幅 Options: [StatCache] |
--largesize=N | 静态文件不进内存的阈值(字节) | 默认 44040192(约 42MB);✅ 实测 --largesize 1048576 后横幅同步 |
--timeout=N | 大文件服务超时(秒) | 默认 10;✅ 实测 --timeout=5 横幅 Large file timeout: 5 sec(help 中另有 86400 的口径,以横幅实测为准) |
3.6 限流与安全头
| 参数 | 作用 | 实测 |
|---|---|---|
--limit=N | 每客户端每秒请求数 | 默认 10;✅ 实测 --limit=2 时第 3 个请求起返回 429,响应头 X-Rate-Limit-Limit: 2.00;--limit=5 横幅同步 |
--nolimit | 关闭限流 | ✅ 横幅 Request limit: Off |
--stricter | 更严格的同源安全头 | ✅ 实测响应新增 Content-Security-Policy: connect-src 'self'; object-src 'self'; form-action 'self' |
--noheaders | 去掉安全相关响应头 | ✅ 实测 X-Content-Type-Options、X-Frame-Options、X-Xss-Protection 全部消失 |
--hide-dotfiles | 隐藏 . 开头文件与目录 | ✅ 实测 /.dotfile 返回 404,普通文件 200 |
--strict-symlinks | 不跟随逃出服务目录的符号链接 | 1.17.12 新增(Release Notes);✅ 横幅 Options: [StrictSymlinks] |
--insecure | 放宽安全设置 | 仅调试用,生产禁用 |
--cookiesecret=STRING | 登录 cookie 的签名密钥 | 多实例共享登录态时需一致;✅ 实测接受参数无告警 |
--clear | 清空默认 URI 权限前缀 | 重新用 SetUserPrefix 规划权限时使用 |
3.7 TLS 证书与 Let's Encrypt
| 参数 | 作用 |
|---|---|
--letsencrypt | 用 Let's Encrypt/CertMagic 为所有服务的域名自动签证书(需 --domain 配合) |
--testcert | 切换 Let's Encrypt staging CA,避免配置期触发生产签发限流 |
-D, --domain | 按请求域名取同名子目录作为站点根(多站点托管) |
💡 v1.17.12 Release Notes:证书存储位置已改为
$XDG_DATA_HOME/certmagic、$HOME/.local/share/certmagic或/var/lib/algernon;--prod模式的手工证书约定路径为/etc/algernon/cert.pem与/etc/algernon/key.pem(实测缺证书时level=error msg="open /etc/algernon/cert.pem: no such file or directory")。
3.8 事件服务器与自动刷新
| 参数 | 作用 | 实测 |
|---|---|---|
-a, --autorefresh | 开启事件服务器与浏览器自动刷新,缓存自动切 images | ✅ 实测横幅 Options: [Auto-refresh]、Cache mode: Images、Event path: /sse (on main server);SSE 端点挂在主服务的 /sse 路径 |
--eventserver=[HOST][:PORT] | 单独起一个只发事件的 SSE 服务 | 独立端口承载事件流 |
--eventrefresh=DURATION | 客户端刷新间隔 | 默认 350ms |
--eventsocket=/path | 事件 socket 落盘路径(实验性) | — |
--watchdir=DIRECTORY | 只对该目录启用自动刷新 | ✅ 实测横幅 Options: [Auto-refresh, NonInteractive]、Cache mode: Off |
3.9 反向代理
--proxy=[/PREFIX=]ENDPOINT:把请求反代到 ENDPOINT(如 3000 或 http://localhost:3000);带路径前缀(如 /api=)时只代理该前缀,不带则整站代理;可重复多次配置多条规则。
实测(后端为 python3 -m http.server 5000,只绑 IPv4):
algernon -s --httponly --proxy="/api=http://127.0.0.1:5000" /srv/algernon :3029
curl -s http://localhost:3029/api/index.html
实测输出:
backend-ok
⚠️ 排障实录:
--proxy="/api=http://localhost:5000"时反代 502——Algernon 拨号解析到[::1]:5000,而后端只监听 IPv4127.0.0.1。把端点写成http://127.0.0.1:5000即恢复 200。双栈环境下反代端点建议显式写 IP 版本。
3.10 日志与杂项
| 参数 | 作用 | 实测 |
|---|---|---|
--accesslog=FILENAME | 访问日志(Combined Log Format) | ✅ 实测两笔请求落文件:[24/Oct/2026:11:41:24 +0000] "GET / HTTP/1.1" 200 51 "http://nowhere/" "Go-http-client/1.1" 0.039 ms |
--ncsa=FILENAME | 访问日志(Common Log Format/NCSA) | ✅ 实测同上请求格式:[24/Oct/2026:11:41:24 +0000] "GET / HTTP/1.1" 200 51 0.039 ms |
--log=FILENAME | 服务器日志写文件替代控制台 | ✅ 实测控制台 0 输出,文件 2 行 |
--internal=FILENAME | 内部日志文件(较啰嗦) | 调试库行为时用 |
--nocolor | 日志去配色 | 重定向到文件时建议 |
--conf=FILENAME | 启动时执行指定 Lua 配置文件 | 见第四章 |
--dirbaseurl=URL | 目录列表链接的前置 Base URL | 见第六章排障实录 |
--ctrld | REPL 中连按两次 Ctrl-D 退出 | 管道喂 REPL 时必加,否则挂起 |
-m | 浏览器预览单个 Markdown 文件,服务一次即退 | 等价 -q -o -z;✅ 实测端口 3000 返回 200 |
-l, --lua | 不起服务,只进 Lua REPL | ✅ 实测见 D1 篇 |
--theme=NAME | 内置主题:light/dark/bw/redbox/wing/material/neon/werc/setconf | 作用于 Markdown、错误页、目录列表与 HyperApp 应用 |
--themefix | 主题未设置时自动修正 | — |
-D, --domain | 按域名映射子目录 | 多站点 |
四、serverconf.lua 配置
--conf(旧名 --serverconf)在服务启动阶段执行一个 Lua 文件,适合放不进命令行的结构性配置。实测文件 /tmp/serverconf.lua:
SetAddr(":3999")
OnReady(function()
log("serverconf.lua loaded, ServerInfo:")
log(ServerInfo())
end)
启动与实测回显:
algernon -s --conf=/tmp/serverconf.lua --nodb /srv/algernon :3099
level=info msg="serverconf.lua loaded, ServerInfo:"
level=info msg="TLS certificate: cert.pem / TLS key: key.pem
Cache mode: on
Database: no database backend
Compression: on
Server: {}
Options: {}
Serving /srv/algernon
HTTP/2 (no port specified)
"
两个实测结论:
- 命令行位置参数覆盖
SetAddr:serverconf.lua里的SetAddr(":3999")被命令行的:3099覆盖——结构性配置放 serverconf,运行时端口用命令行,二者不要同时表达同一件事; ServerInfo()是排查配置加载结果的利器,把缓存模式、数据库、压缩、监听情况一次性打印出来。
常用的 serverconf 函数族(完整清单用 REPL 的 webhelp/confighelp 自省,见 D1 篇):SetAddr、SetPorts、SetDir、SetCacheMode、SetLimit、SetTheme、SetSaveLog、SetHideDotfiles、AddReverseProxy、AddUserPrefix、SetUserPrefix、OnReady、ServerInfo。
.alg/.zip 应用包内的 serverconf.lua 随包加载,无需 --conf 显式指定。
五、参数组合实战
5.1 开发热重载(help 官方推荐组合)
algernon --dev --httponly --debug --autorefresh --bolt --noninteractive . :4000
Debug 显示错误 + /sse 自动刷新 + Bolt 固定文件 + 固定端口。改 index.lua 保存后浏览器自动刷新。
5.2 多域名 HTTP/2 生产(help 官方推荐组合)
algernon -c --domain --noninteractive --cachesize 67108864 --prod /srv
/srv/mydomain.com、/srv/otherweb.com 各自映射域名,statcache + 64MB 缓存 + prod 模式,80/443 双端口。
5.3 QUIC 实验(help 官方推荐组合)
algernon -s -u -n . :7000
需补 --cert/--key,否则 QUIC 自动回落(见 3.3 实测)。
5.4 systemd 托管最小组合(B1 篇主方案)
ExecStart=/usr/local/bin/algernon --httponly --addr=:3000 --noninteractive --boltdb=/var/lib/algernon/algernon.db /srv/algernon
5.5 纯静态无状态速起
algernon -x
当前目录、常规 HTTP、无数据库、无限流、无缓存依赖——help 把它作为最简示例收录。
六、排障实录
6.1 -x 模式悄悄关掉限流与数据库
现象:algernon -x --limit=2 后连打 8 个请求全部 200,未出现 429。
定位:横幅显示 Request limit: Off、Database: Disabled。回读 help 原文:-x, --simple 的定义是 "disable all features that requires a database"——限流状态存储依赖数据库,所以一并被关。
处理:要限流就不能用 -x,改用 -s --httponly --boltdb=...。-x 只适合「纯静态、无状态」的临时分发场景。
6.2 目录列表链接带出莫名前缀
现象:curl http://localhost:3000/sub/ 的目录列表里,文件链接渲染为 <a href="/b/a.txt">a.txt</a>,多出一个 /b/ 前缀。
定位:v1.17.12 Release Notes 新增 --dirbaseurl flag「for placing a base URL in front of the links in the directory listing」,目录列表的链接前缀不再默认等于请求路径。
处理:启动参数显式加 --dirbaseurl=/,实测链接恢复 <a href="/one.txt">one.txt</a>。需要把 Algernon 放在反向代理子路径后时,则把 --dirbaseurl 设为该子路径。
6.3 Server 响应头在 -x 模式下消失
现象:--servername=MyEdge/1.0 在常规模式下生效(curl -D- 可见),-x 模式下响应头完全没有 Server 字段。
定位:-x 精简模式同时精简了响应头集合,与 6.1 同源——-x 关闭的不只是数据库,还包括一批「非必要」输出。
处理:对外暴露自定义 Server 头时避开 -x。
6.4 --prod 无证书时的报错路径
现象:algernon --prod 报 level=error msg="open /etc/algernon/cert.pem: no such file or directory"。
定位:--prod 固定按 /etc/algernon/cert.pem、/etc/algernon/key.pem 找证书,且强制监听 80/443(非 root 需要 setcap)。
处理:手工证书放 /etc/algernon/ 下或用 --cert/--key 显式指定;自动化签发改用 --letsencrypt --domain。
七、常见问题 FAQ
Q1:--cachesize 与横幅 Cache size 数值对不上?
默认横幅 1048576(1MB);help 的 Example 中给出 --cachesize 67108864 的用法,显式传参后横幅同步为准。判断当前值一律看横幅。
Q2:--limit 传了却不生效?
检查是否同时用了 -x(见 6.1);-x 会关限流。去掉 -x 并给一个真实数据库后端(Bolt 文件即可)。
Q3:-n 不打印横幅?
1.17.12 实测 -n 仍打印横幅(与 help 文案不符),要静默用 -q,但 -q 连访问日志之外的报错也会吞掉,排障期别用。
Q4:IPv6 怎么监听?
--addr='[::1]:3000' 或 [2001:db8::1]:443,方括号必须有。
Q5:限流 429 的响应头有哪些?
X-Rate-Limit-Limit(阈值)、X-Rate-Limit-Duration(1s)、X-Rate-Limit-Request-Forwarded-For(客户端标识),实测与 tollbooth 库行为一致。
Q6:怎么确认我的参数组合最终生效了什么?
启动横幅六行速查(Database/Cache/Request limit/Options/Listening)+ ServerInfo()(serverconf.lua 中打印),两条路覆盖全部关键配置。
八、参考链接
- 官方 README(配置与函数清单):https://github.com/xyproto/algernon
- TUTORIAL(serverconf 与 Lua 函数教程):https://github.com/xyproto/algernon/blob/main/TUTORIAL.md
- v1.17.12 Release Notes(新参数与行为变更):https://github.com/xyproto/algernon/releases/tag/v1.17.12
- 本专栏姊妹篇:《Algernon 1.17.12 介绍与选型指南》、《Ubuntu 24.04 安装 Algernon 1.17.12 指南》