前面陆陆续续在雨云上搭了不少自托管应用——网盘、密码库、书签、看板……每个都单独记账号密码,既难记又不安全,有的应用自身还不支持二次验证。Authelia 是一个开源认证网关,放在反向代理前面,给多个内部应用提供统一登录(SSO)和 TOTP 二次验证。本文在雨云 KVM 云服务器上部署 Authelia,并通过 Nginx 的 auth_request 把 Vaultwarden、Cloudreve 等应用护在身后,做到”一次登录、处处通行”。
为什么需要统一认证网关
- 一处登录,处处通行:多个应用共享一套账号和会话,不用每个都登一遍。
- 统一开 2FA:很多轻量应用自身没有二次验证,交给网关统一做 TOTP,安全水位整体拉高。
- 集中防护:弱口令、爆破、会话过期都在网关这一层处理,后面的应用可以关掉各自的公网暴露。
- 和监控类工具不重叠:它管的是”谁能进”,不是”网站在不在”(那是 Uptime Kuma 的事)。
一、架构与前置
典型架构是:用户 → Nginx 反向代理 → Authelia 校验 → 后端应用。
前置准备:
- 一台雨云 KVM 云服务器(优惠码 admin01 五折,7 天无理由退款),系统 Debian 12,到手先按 VPS 到手第一件事 做安全初始化。
- 已经跑好 Nginx 反代(可参考 手动搭建 LNMP 或后面用 Portainer 管容器),并且你的应用已经通过域名访问。
- 新手选型看 VPS 怎么选不踩坑。
Authelia 自身监听 9091,它不直接对外服务页面,而是由 Nginx 通过子请求调用。
二、用 Docker 跑起 Authelia
目录与 docker-compose.yml 示例:
services:
authelia:
image: authelia/authelia:latest
container_name: authelia
restart: unless-stopped
volumes:
- ./config:/config
ports:
- "9091:9091"
environment:
- TZ=Asia/Shanghai
config/configuration.yml 关键点(节选):
theme: dark
jwt_secret: 换成随机长字符串
session:
secret: 换成另一个随机长字符串
expiration: 1h
inactivity: 30m
access_control:
default_policy: deny
rules:
- domain: auth.example.com
policy: bypass # 登录页自身放行
- domain: app.example.com
policy: one_factor # 至少密码
- domain: secret.example.com
policy: two_factor # 强制二次验证
totp:
issuer: 雨云自托管
用户可以直接写在 config/users_database.yml 里(演示够用),生产也可接 LDAP/OpenID。生成随机密钥用:
openssl rand -hex 32
三、Nginx 接入 auth_request
在 Nginx 的 server 块里,先放一段 Authelia 登录页与校验端点的转发:
location /authelia {
internal;
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $host;
}
location /authelia/ {
proxy_pass http://127.0.0.1:9091/;
}
然后给需要保护的应用加一行校验(以 Vaultwarden 密码库 或 Cloudreve 网盘 为例):
location / {
auth_request /authelia;
error_page 401 =302 https://auth.example.com/?rd=$scheme://$http_host$request_uri;
proxy_pass http://127.0.0.1:应用端口;
}
注意:Authelia 的登录域名(上面 bypass 那条)一定要放行,否则会自己把自己挡在门外,陷入登录死循环。
四、把应用护进来
按上面的模板,把 Vaultwarden、Cloudreve、甚至 Nextcloud 网盘 的 location 都加上 auth_request。效果:
- 访客先被弹到统一登录页,输密码 + TOTP;
- 通过后带上会话 Cookie,才能进后端应用;
- 后端应用可以只监听内网或
127.0.0.1,进一步缩小攻击面。
合规提醒
认证网关只用于保护你自己部署、拥有合法权限的应用,使用时注意:
- 遵守《网络安全法》及相关规定,不将认证机制用于突破任何网络管控或他人系统的鉴权。
- JWT 密钥、session 密钥、2FA 恢复码都属于高敏感凭据,不要写进会公开的地方,定期轮换。
- 仅对授权范围内的应用启用保护,不要对无关第三方服务做中间人式拦截。






