Glowing Bear 0.10.0 配置参数详解

Glowing Bear 0.10.0 全链路配置参数详解:WeeChat relay 侧 17 个 relay.network 参数逐项解读(认证/TOTP/端口/并发/TLS/压缩/backlog)、前端连接页参数、nginx 反代与 HTTPS 站点配置,每项配实测生效验证与生产模板。

Glowing Bear即时通讯IRCWebSocket2026/10/26

Glowing Bear 0.10.0 配置参数详解

目标:把 Glowing Bear 一条链路上的全部配置参数讲透——WeeChat relay 侧(relay.conf 与 /relay 指令)、前端连接页、nginx 反代站点,每项给出配置片段与生效验证。全部取值在 Ubuntu 22.04 + WeeChat 3.5 + Glowing Bear 0.10.0 实测环境采集(2026-10-26)。

一、环境信息

项目值
操作系统Ubuntu 22.04.5 LTS(jammy),x86_64
WeeChat3.5-1(relay 配置文件 /var/lib/weechat/.config/weechat/relay.conf)
relay 实例weechat = 9001(明文)、ssl.weechat = 9002(TLS)
Glowing Bear0.10.0(master commit b53e42f5),静态站点 /var/www/glowing-bear
Web 服务器nginx 1.18.0,80/443,/weechat 路径反代 relay
relay 证书/var/lib/weechat/.config/weechat/ssl/relay.pem(2790 字节)
演示 relay 密码q1w2e3r4(演示账号规则)

部署过程见本专栏《Ubuntu 22.04 部署 Glowing Bear 指南》( https://www.quzuo.net/document/f16RyM65090X ),本文在其产出的可用环境上展开参数层。

二、前置条件

  1. 已按部署指南完成:WeeChat 运行中(tmux 会话 weechat)、relay 9001/9002 在监听、nginx 站点 80/443 可达。
  2. 能进入 WeeChat(tmux attach -t weechat,或用 tmux send-keys -t weechat '<命令>' Enter 注入——本文回显均以此方式采集)。
  3. 浏览器可打开站点连接页。

三、参数查看与修改方式

Glowing Bear 的"配置"分布在三层,修改方式各不相同:

第 1 层:WeeChat relay 侧(本文重点)。三种手段:

  • /set relay.network.<参数> <值>——逐项修改,立即生效(个别需重连);
  • /fset relay.network.*——打开交互式过滤视图,一次看全 17 个参数的类型/默认值/当前值,光标选中回车进入编辑;
  • 直接改 relay.conf——官方在文件头警告"不建议手改,尤其 WeeChat 运行中",应改用 /set 或 /fset,/save 落盘。

第 2 层:relay 实例管理,由 /relay 指令族负责。/help relay 实测输出的用法与示例(原文照抄,注意官方原文中 "Succesfully" 为官方拼写原样保留):

/relay list
/relay add <name> <port>
/relay add [-config <config>] [-port <port>] <name> [<socket-path>]
/relay del <name>
/relay raw
/relay sslcertkey
  weechat protocol:
    /relay add weechat 9000
  weechat protocol with SSL:
    /relay add ssl.weechat 9001
  weechat protocol with SSL, using only IPv4:
    /relay add ipv4.ssl.weechat 9001
  weechat protocol over UNIX domain socket:
    /relay add unix.weechat ${weechat_runtime_dir}/relay_socket
  irc proxy, for server "libera", with SSL:
    /relay add ssl.irc.libera 8001
  irc proxy, for all servers (client will choose), with SSL:
    /relay add ssl.irc 8002

relay 名格式 [ipv4.][ipv6.][ssl.]<协议>:协议 weechat 供 Glowing Bear 前端使用,irc.<名称> 把 relay 变成 IRC bouncer;ssl. 前缀启用 TLS;ipv4./ipv6./unix. 控制监听形态。修改实例后 /save 落盘到 relay.conf 的 [port] 段(实测值):

[port]
ssl.weechat = 9002
weechat = 9001

第 3 层:前端连接页与 nginx 站点,分别见第六、七章。

四、参数总览

/fset relay.network.* 实测回显(WeeChat 3.5,17 项全量,右侧为当前值,均为 2026-10-26 实采):

relay.network.allow_empty_password       boolean  off
relay.network.allowed_ips                string   ""
relay.network.auth_timeout               integer  60
relay.network.bind_address               string   ""
relay.network.clients_purge_delay        integer  0
relay.network.compression                integer  20
relay.network.ipv6                       boolean  on
relay.network.max_clients                integer  5
relay.network.nonce_size                 integer  16
relay.network.password                   string   "q1w2e3r4"
relay.network.password_hash_algo         string   "*"
relay.network.password_hash_iterations   integer  100000
relay.network.ssl_cert_key               string   "${weechat_config_dir}/ssl/relay.pem"
relay.network.ssl_priorities             string   "NORMAL:-VERS-SSL3.0"
relay.network.totp_secret                string   ""
relay.network.totp_window                integer  0
relay.network.websocket_allowed_origins  string   ""

同表在 relay.conf [network] 段的落盘形态(实测文件摘录):

[network]
allow_empty_password = off
allowed_ips = ""
auth_timeout = 60
bind_address = ""
clients_purge_delay = 0
compression = 20
ipv6 = on
max_clients = 5
nonce_size = 16
password = "q1w2e3r4"
password_hash_algo = "*"
password_hash_iterations = 100000
ssl_cert_key = "${weechat_config_dir}/ssl/relay.pem"
ssl_priorities = "NORMAL:-VERS-SSL3.0"
totp_secret = ""
totp_window = 0
websocket_allowed_origins = ""

与 relay 行为相关的还有 [irc] 段 6 项 backlog 参数与 [look] 段 2 项(auto_open_buffer = on、raw_messages = 256,后者对应 /relay raw 抓包缓冲长度),见 5.6。

五、核心参数分类详解

5.1 认证与密码

参数实测值说明
passwordq1w2e3r4relay 登录密码,前端连接页 Password 项必须与此一致;官方 fset 描述允许空密码但默认拒绝空密码
allow_empty_passwordoff官方描述:"allow empty password in relay (it should be enabled only for tests or local network)",保持 off
password_hash_algo*客户端密码握手时允许的哈希算法集,* 表示全部可用(relay 协议握手阶段客户端与服务端协商)
password_hash_iterations100000PBKDF2 迭代次数,默认 10 万轮
nonce_size16握手 nonce 字节数(16 字节),属协议层防重放参数,默认即可
totp_secret""TOTP 共享密钥;非空时前端需在连接页打开 TOTP 开关并输入动态口令
totp_window0TOTP 校验容忍窗口,0=默认严格校验
auth_timeout60客户端连接后完成认证的时限(秒),实测日志时序 connected (waiting auth) → connected/authenticated 在该窗口内完成

密码安全落盘的推荐写法(避免 relay.conf 明文):

/secure passphrase q1w2e3r4
/secure set relay_password q1w2e3r4
/set relay.network.password ${sec.data.relay_password}
/save

生效验证:/save 后 relay.conf 中 password = "${sec.data.relay_password}"(secure 已启用时);未启用 secure 时实测落盘为明文 password = "q1w2e3r4"。

TOTP 叠加(可选):/secure set relay_totp_secret <BASE32密钥> → /set relay.network.totp_secret ${sec.data.relay_totp_secret}。前端连接页有对应开关 "Use Time-based One-Time Password"(Glowing Bear 官方托管版连接页实选项)。

5.2 端口与 relay 实例

参数/命令实测值说明
[port] weechat9001明文 relay 实例(/relay add weechat 9001 落盘)
[port] ssl.weechat9002TLS relay 实例(/relay add ssl.weechat 9002 落盘)
bind_address""relay 绑定地址,空=全部网卡;只想内网监听可设 127.0.0.1 或内网 IP
ipv6on同时监听 IPv6;实测 ss -ltn 显示 *:9001(IPv4+IPv6 双栈)

新增/删除实例后验证:

ss -ltn | grep -E ':9001 |:9002 '
LISTEN 0      4096               *:9002             *:*
LISTEN 0      4096               *:9001             *:*

5.3 并发与访问控制

参数实测值说明
max_clients5每端口最大并发客户端。官方描述:"maximum number of clients connecting to a port (0 = no limit)",取值范围 0–2147483647
allowed_ips""来源 IP 白名单,空=不限;填写如 "10.0.0.0/8" 可限内网访问
websocket_allowed_origins""WebSocket Origin 白名单(只影响 websocket 形态的连接);空=不限
clients_purge_delay0断开客户端信息的清理延迟,0=立即清理(/relay raw 视图中的过期记录)

max_clients 超限行为有实测日志(第 6 个客户端连入 9001 被拒,WeeChat 核心 buffer 原样照抄):

relay: client 5/weechat/127.0.0.1 connected/authenticated
=!=  relay: client not allowed (max 5 clients are allowed at same time)
relay: disconnected from client 1/weechat/127.0.0.1
relay: disconnected from client 2/weechat/127.0.0.1
relay: disconnected from client 3/weechat/127.0.0.1
relay: disconnected from client 4/weechat/127.0.0.1
relay: disconnected from client 5/weechat/127.0.0.1
relay: no connected client for relay

⚠️ 注意:超限时 WeeChat 不仅拒绝第 6 个连接,还会断开既有客户端(实测日志可见 5 个连接被全部断开、no connected client for relay)。多端使用的环境要么调大 max_clients(/set relay.network.max_clients 10),要么减少常驻连接。

💡 技术拓展:relay 的连接形态有三种——浏览器经 nginx 反代(Origin 是站点自身)、浏览器直连 relay 端口、纯 WebSocket 工具直连。websocket_allowed_origins 只对第三类 WebSocket 握手的 Origin 头生效:收紧为本站域名后,走 nginx 同源反代的连接不受影响(反代转发时 Origin 即为本站),而外部页面用浏览器 JS 直接构造跨源 WebSocket 会被拒。公网部署建议:/set relay.network.websocket_allowed_origins "<你的站点域名>",并配合 5.2 的 bind_address 把 relay 限定到内网地址,只留 nginx 对外。

5.4 TLS

参数实测值说明
ssl_cert_key${weechat_config_dir}/ssl/relay.pemTLS relay 的证书+私钥合体文件路径;实测文件 2790 字节
ssl_prioritiesNORMAL:-VERS-SSL3.0GnuTLS 优先级串,默认剔除 SSL3.0

自签证书生成与装载(req -x509 把证书与私钥写入同一 PEM):

openssl req -nodes -newkey rsa:2048 -keyout /var/lib/weechat/.config/weechat/ssl/relay.pem \
  -x509 -days 3650 -out /var/lib/weechat/.config/weechat/ssl/relay.pem \
  -subj "/CN=gb.example.internal"
chmod 600 /var/lib/weechat/.config/weechat/ssl/relay.pem
/relay add ssl.weechat 9002
/relay sslcertkey

生效验证:证书替换后必须再执行一次 /relay sslcertkey 重载;ss -ltn | grep 9002 确认 TLS relay 在监听,浏览器直连 9002 勾选 Encryption 可完成 TLS 握手。

5.5 传输压缩

compression = 20(整数,单位为百分比语义的压缩阈值配置,0=禁用)。前端侧印证:Glowing Bear package.json 依赖 zlibjs(浏览器端 zlib 实现),即前端具备解压 relay 压缩消息的能力,链路开启压缩后大 buffer 的 backlog 传输体积明显下降。默认 20 保持即可。

5.6 历史回放(backlog)

relay.conf [irc] 段实测值:

[irc]
backlog_max_minutes = 0
backlog_max_number = 1024
backlog_since_last_disconnect = on
backlog_since_last_message = off
backlog_tags = "irc_privmsg"
backlog_time_format = "[%H:%M] "
参数值说明
backlog_max_number1024断线重连后单 buffer 最多补放的消息条数
backlog_max_minutes0时间上限(分钟),0=不限时间只看条数
backlog_since_last_disconnecton只补放"上次断开后"的消息(多端切换不重复刷屏的关键)
backlog_since_last_messageoff与上一项互补的补放基准开关
backlog_tagsirc_privmsg补放哪些标签的消息(默认只补聊天正文,不补 join/part 噪音)
backlog_time_format[%H:%M]补放消息的时间戳格式

实测行为(浏览器重连后频道 buffer 顶部出现):

<--  peer (~peer@localhost) has quit (Client closed connection)
        =?=  ========== End of backlog (18 lines) ==========
 -->  gbuser (~weechat@localhost) has joined #test

End of backlog (18 lines) 即重连补放边界:18 条以内按 backlog_max_number/since_last_disconnect 策略回放,边界之后为实时消息。

六、前端连接参数详解

Glowing Bear 前端本身零配置文件,连接参数全部在连接页(首次使用)或 localStorage(之后)。实测连接页参数项:

连接项说明对应 relay 侧
WeeChat hostrelay 所在服务器地址(IP/域名)relay 监听地址
Portrelay 端口:443(走 nginx HTTPS 反代)或 9002(直连 TLS relay)[port] 段实例
Passwordrelay 密码relay.network.password
Encryption勾选后用 wss:// TLS 连接ssl relay 或 HTTPS 反代
Use Time-based One-Time Password打开后输入 TOTP 动态口令relay.network.totp_secret
Save Password密码保存在浏览器 localStorage—(本地行为)
Automatically connect打开站点自动重连—(本地行为)

关于编码:连接页不提供编码切换项——relay 协议消息统一 UTF-8 传输,WeeChat 侧字符集由 IRC 服务器配置(/set irc.server.<名>.charset)决定,前端按 UTF-8 渲染,因此"乱码问题去 WeeChat 侧查",前端无需配置。

连接失败的快速判定(前端表现 → 侧别):

  • 一直 "Connecting…":网络/TLS 层问题(查 nginx、端口、证书);
  • 连上后立即断开并要求密码:认证层问题(查 password/TOTP);
  • 连上但 buffer 为空:relay 握手后协议层问题(查 /relay raw 抓包视图)。

七、nginx 反代与 HTTPS 站点配置

站点配置(实测生效版本,/etc/nginx/sites-available/glowing-bear,两个 server 块分别承载 HTTP/HTTPS,HTTPS 块为公网推荐形态):

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    ssl_certificate     /etc/nginx/ssl/gb.crt;
    ssl_certificate_key /etc/nginx/ssl/gb.key;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_session_cache   shared:SSL:10m;

    root /var/www/glowing-bear;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;    # 单页应用回退
    }

    location /weechat {
        proxy_pass http://127.0.0.1:9001;    # 反代到本机 relay(不出服务器)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;    # WebSocket 升级三件套
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 3600s;    # relay 长连接保活(默认 60s 必断)
        proxy_send_timeout 3600s;
    }
}

逐项要点:

  • proxy_http_version 1.1 + Upgrade/Connection 头:WebSocket 协议升级的最低要求,缺一不可(缺了浏览器停在 "Connecting…");
  • proxy_read_timeout 3600s:relay 连接是长连且空闲期只有心跳级流量,默认 60s 会周期性掐断(前端表现"每分钟转圈重连");
  • proxy_pass 指向 9001 明文 relay:浏览器↔nginx 已是 TLS,nginx↔relay 走回环明文不出机器;若 relay 侧也要 TLS,可改为 https://127.0.0.1:9002 并加 proxy_ssl_verify off(自签场景);
  • ssl_protocols TLSv1.2 TLSv1.3:与 relay 侧 ssl_priorities 剔除 SSL3.0 的思路一致,禁旧版协议。

生效验证三连(实测回显):

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl reload nginx
curl -sSk -o /dev/null -w "%{http_code} %{size_download}\n" https://127.0.0.1/
200 39961

relay 侧看到的反代来源(WebSocket 经 nginx 进来,来源为回环地址):

relay: new client on port 9001
relay: websocket client 1/weechat/127.0.0.1 (waiting auth)
relay: client 1/weechat/127.0.0.1 has real IP address "10.89.73.1"
relay: client 1/weechat/127.0.0.1 connected/authenticated

(has real IP address 由 X-Real-IP 头透传,relay 日志可核对访问来源。)

八、生产配置模板

场景:单用户公网自用,2 核 4GB 内存、40GB 磁盘的小型云主机,WeeChat 常驻 + nginx HTTPS 反代,前端自托管。以下为推荐参数集(默认值为主的"最小改动"风格):

/set relay.network.password ${sec.data.relay_password}
/set relay.network.max_clients 10
/set relay.network.allowed_ips ""
/set relay.network.websocket_allowed_origins "chat.example.com"
/set relay.network.bind_address ""
/set relay.network.auth_timeout 60
/set relay.network.compression 20
/set relay.network.backlog_max_number 1024
/set relay.network.backlog_since_last_disconnect on
/save

nginx 侧保持第七章模板,重点保住 proxy_read_timeout 3600s;资源占用上 WeeChat + nginx + 静态前端在该规格下无压力(无数据库、无后台任务),瓶颈只会出现在 relay 的 backlog 回放(首次连接多/多 buffer 时一次 1024 条回放),保持默认即可。

九、常见问题(FAQ)

Q1:/set 改了参数为什么前端行为没变? 部分参数只对新连接生效(如 max_clients、websocket_allowed_origins),改完 /save 后断开前端重连即可;确认方法再看 /fset relay.network.* 中当前值是否已更新。

Q2:relay.conf 里密码是明文,怎么变成引用? 走 secure:/secure passphrase → /secure set relay_password <密码> → /set relay.network.password ${sec.data.relay_password} → /save(见 5.1)。

Q3:公网要不要直接暴露 9001? 不要。公网形态二选一:nginx HTTPS 反代(只暴露 443,relay 留回环/内网),或浏览器直连 9002 TLS relay。明文 9001 仅限本机/内网调试。

Q4:多设备同时在线被踢? max_clients 上限行为是"拒绝新连接并断开既有连接"(5.3 实测日志),调大该值或减少常驻连接(关闭多余标签页)。

Q5:重连后消息少了或重复了? 检查 backlog 组参数:backlog_since_last_disconnect = on 保证只补断开后的消息;backlog_max_number 控制条数上限;两者配合仍不够回看历史,用 WeeChat 自身日志(/logger 插件)而非调大 backlog。

十、参考链接