前言
家庭 Web 服务使用 Lucky 汇总反向代理入口。本文记录在 Alpine LXC 中安装、注册服务、配置域名转发与 HTTPS,以及按访问链路排查问题。
一、部署环境
按照 NAS 折腾日记(2)PVE 与 Docker 基础环境部署 创建非特权 Alpine LXC,示例 CT ID 为 201、主机名为 lucky,不启用 Docker nesting 或 NFS 挂载。示例地址 192.168.20.31/24,网关 192.168.20.1。程序直接运行在该 LXC 中,PVE 设置开机启动。以下命令在 Lucky LXC 执行。
反向代理以 NAS 折腾日记(5)Homepage 部署与服务导航 的 Homepage 为例,其上游为 http://192.168.20.30:3000。先确认从 Lucky LXC 可以访问上游。
二、安装与服务管理
在 Lucky LXC 内安装下载工具:
bash12apk update apk add curl ca-certificates tar
从 Lucky 发布页选择 Linux amd64 安装包,复制对应 release asset 的下载链接。在 Lucky LXC 中下载,下面的地址占位符须替换为完整链接:
bash1curl -fL 'REPLACE_WITH_RELEASE_ASSET_URL' -o /tmp/lucky.tar.gz
解压后把 lucky 可执行文件放到 /usr/local/bin/lucky:
bash123mkdir -p /tmp/lucky-package /etc/lucky tar -xzf /tmp/lucky.tar.gz -C /tmp/lucky-package find /tmp/lucky-package -type f -name lucky
按上一条输出找到二进制路径,复制到目标位置:
bash1234# 将示例来源路径改为 find 实际显示的文件 cp /tmp/lucky-package/lucky /usr/local/bin/lucky chmod 755 /usr/local/bin/lucky /usr/local/bin/lucky -c /etc/lucky/lucky.conf
先以前台方式启动,默认管理入口为 http://192.168.20.31:16601,初始账号和密码均为 666。登录后立即修改账号、密码和安全入口,再启用功能模块。管理端口 16601 与后面代理业务使用的 80/443 分开。Lucky 支持指定配置文件或目录,参数见 官方安装说明。下面将相同启动命令整理为 OpenRC 服务,供新建 Alpine 环境使用;实际机器使用安装脚本生成的启动方式。
结束前台进程后,创建 /etc/init.d/lucky:
bash123456789#!/sbin/openrc-run name="Lucky" supervisor="supervise-daemon" command="/usr/local/bin/lucky" command_args="-c /etc/lucky/lucky.conf" depend() { need net }
启用服务:
bash1234chmod 755 /etc/init.d/lucky rc-update add lucky default rc-service lucky start rc-service lucky status
在 Lucky 的 Web 服务中添加规则,将 home.example.com 转发至 http://192.168.20.30:3000。先使用 HTTP 监听端口 80,确认代理链路:
bash12# 从能访问 Lucky 的客户端执行 curl -I -H 'Host: home.example.com' http://192.168.20.31/
再通过浏览器访问 http://home.example.com。AdGuard Home 负责将域名解析到 Lucky,Lucky 根据域名转发到 Homepage。
需要 HTTPS 时,在 Lucky 的证书管理中为自己的域名申请证书。使用 DNS 验证时,选择域名对应的 DNS 服务商,填写该服务商要求的凭据,申请成功后在 Web 服务规则中启用 TLS、监听 443 并选择对应证书。Homepage 的 HOMEPAGE_ALLOWED_HOSTS 已包含导航域名,可继续用 https://home.example.com 访问。
三、逐项配置 Web 服务
将配置分为监听、匹配、转发三部分。以导航为例:
| 配置项 | 示例 |
|---|---|
| 监听端口 | HTTP 80,HTTPS 443 |
| 匹配域名 | home.example.com |
| 上游协议 | HTTP |
| 上游主机 | 192.168.20.30 |
| 上游端口 | 3000 |
| TLS 证书 | 覆盖 home.example.com 的证书 |
上游填写 Homepage 所在的 LXC 地址和发布端口。客户端访问的域名由 DNS 指向 Lucky,反代再按域名选择上游。多个服务可以使用同一监听端口、不同域名,各自填写上游。
申请证书后检查证书覆盖的名称、有效期和 Web 服务中选用的证书。DNS 验证的凭据保存在 Lucky 配置中,备份目录按管理数据保存。
四、验证访问链路
在 Lucky LXC 中验证上游:
bash1curl -I http://192.168.20.30:3000
在客户端绕过 DNS,指定解析测试 HTTPS:
bash1curl --resolve home.example.com:443:192.168.20.31 -I https://home.example.com/
最后使用正常 DNS 访问 https://home.example.com。这样可分别检查应用、代理与域名解析。内网 DNS 配置见 NAS 折腾日记(6)AdGuard Home 部署与内网 DNS。
| 现象 | 检查项 |
|---|---|
| 上游直连失败 | Homepage 是否运行、端口发布、LXC 防火墙 |
| 返回 502 | Lucky 到上游的地址、端口与协议 |
| 页面提示 Host 不允许 | Homepage 的 allowed hosts |
| 浏览器证书错误 | 访问域名、证书名称、所选证书与有效期 |
| IP 指定访问正常,域名访问失败 | A/AAAA 记录及客户端实际 DNS |
五、接入 Homepage
Lucky 使用独立 LXC,本篇通过 PVE 状态与一个实际代理入口检查它。沿用 NAS 折腾日记(5)Homepage 部署与服务导航 的 proxmox.yaml,将以下条目合并进 services.yaml 的“网络服务”分组:
yaml12345678- 网络服务: - Lucky: href: http://192.168.20.31:16601/YOUR_SAFE_ENTRY description: 反向代理与证书管理 siteMonitor: https://home.example.com proxmoxNode: pve proxmoxVMID: 201 proxmoxType: lxc
YOUR_SAFE_ENTRY 替换为设置后的安全入口,pve 和 201 替换为实际节点名与 CT ID。这里通过 Homepage 的通用 HTTP 检查观察代理入口是否可用。
siteMonitor 请求由 Homepage 容器发出。部署 AdGuard Home 后,在 Portainer 的 Homepage 网络配置中将 DNS 设为 192.168.20.32,重新部署,让容器也能把 home.example.com 解析到 Lucky。客户端浏览器能访问这个名称,并不能证明容器采用了相同 DNS。
卡片中的 LXC 状态表示 Lucky 所在系统是否运行,HTTPS 检查则经过 DNS、Lucky 和 Homepage 上游。若代理检查异常,按上一节拆开排查;不能仅凭这一项判断一定是 Lucky 进程故障。证书续期状态仍在 Lucky 的证书管理与日志中确认。
六、配置备份与更新
本例配置目录为 /etc/lucky,包含服务规则与证书等数据。实际环境的安装目录由安装脚本决定;备份时按进程的配置参数找到完整目录。
bash1234mkdir -p /srv/backups rc-service lucky stop tar -czf /srv/backups/lucky-backup.tar.gz -C /etc lucky rc-service lucky start
更新前保存备份,停止服务后替换 /usr/local/bin/lucky,保留配置目录,启动服务并复查一个 HTTP 和一个 HTTPS 入口。本文使用 Web 反代处理 HTTP 服务;其他协议的端口转发按对应协议单独配置。
参考
支付宝
微信