根据@nanny的文章把外网访问搞定,就是导航页又点单调,给AI又迭代了几十个版本,现在可以后台编辑、分类,好用多了!分享给大家!
巧用阿里ESA,外网V4访问NAS,隐藏端口号,个人导航页全搞定
https://club.fnnas.com/forum.php?mod=viewthread&tid=49169
(出处: 飞牛私有云论坛 fnOS)

阿里云 ESA 个人导航页 (单文件 SSR 版)
这是一个基于阿里云边缘安全加速 (ESA) 的无服务器个人导航页项目。
所有功能(主页、后台、API)都整合在一个边缘函数中,无需配置 Pages,部署极其简单。
- 极速访问: 基于 ESA 边缘节点,全球加速。
- 服务端渲染 (SSR): 首屏加载快,SEO 友好。
- 在线管理: 内置管理后台,随时随地修改链接。
- 动态分类: 支持按分类(如 media, books)分组展示。
目录结构
src/worker.js: 核心代码(包含 HTML 模板和业务逻辑)
部署指南
1. 准备工作
确保你已经开通了阿里云 ESA 服务,并且有一个可用的站点(域名)。
2. 配置边缘 KV (Edge KV)
- 进入 ESA 控制台 -> 边缘计算 -> Edge KV。
- 创建一个新的命名空间,例如命名为
nav_data(推荐使用仅小写英文字母、数字、下划线,避免空格和中文)。
- 记下这个命名空间名称。
- 注意命名空间要与函数配置保持一致,否则读取不到数据或密码。
3. 部署边缘函数 (Edge Routine)
- 进入 ESA 控制台 -> 边缘计算 -> 边缘函数。
- 创建一个新的函数,例如命名为
nav-ssr。
- 进入代码编辑器,将本项目
src/worker.js 的内容完全覆盖进去。
- 配置环境变量:
- 添加环境变量
EDGEKV_NAMESPACE,值为你在 Edge KV 中创建的命名空间(如 nav_data)。不设置时,代码将使用默认命名空间 links_store。
- 可选:添加环境变量
ADMIN_PASSWORD 作为后备密码(备用来源)。
- 点击 保存并部署。
4. 配置路由 (关键步骤)
为了让整个网站生效,你需要将域名下的所有请求转发给这个函数。
- 在 ESA 站点管理中,找到 边缘函数 -> 触发器。
- 添加一个路由触发器:
- 路由模式:
nav.example.com/* (匹配所有路径)
- 关联函数: 选择刚才部署的
nav-ssr。
5. 使用说明
- 访问主页: 打开
https://nav.example.com/。
- 初次访问会显示默认的示例数据(B站、腾讯视频等)。
- 进入后台: 打开
https://nav.example.com/admin。
- 管理链接:
- 输入你设置的密码登录(密码来源见下文“密码设置与优先级”)。
- 添加链接时,可以指定 分类 ID (例如
media, books, tools),首页会自动按分类分组展示。
- 点击“保存更改到服务器”以生效。
密码设置与注意事项
密码支持两种来源(有优先级):
- Edge KV 中的键
ADMIN_PASSWORD(优先)
- 环境变量
ADMIN_PASSWORD
- 若以上都未设置,则默认密码为
admin
如何通过 KV 设置密码:
- 在你创建的命名空间(如
nav_data)里新建键:Key=ADMIN_PASSWORD,Value=你的密码(例如 admin@2022!)
- 值请避免前后空格与换行;复制粘贴时注意不要带不可见字符
- 更新后可能存在边缘节点同步的短暂延迟,建议刷新后台页面重试
认证方式:
- 后端认证接口路径:
/api/auth
- 请求头必须包含:
Authorization: Bearer <你的密码>
- 管理后台会在登录时自动调用该接口进行校验
命名空间与函数配置的匹配:
- 代码会读取环境变量
EDGEKV_NAMESPACE 指定的命名空间;不设置时使用默认 links_store
- 如果你把密码写到另一个命名空间里,而函数仍指向默认命名空间,会导致密码“看起来不生效”
- 如需更改命名空间,建议优先通过环境变量
EDGEKV_NAMESPACE 指定,避免修改代码
常见问题与解决:
- 登录总是失败:检查命名空间是否一致;Key 名必须严格为
ADMIN_PASSWORD;值无多余空格或换行
- 输入过一次错误密码后仍失败:清除浏览器本地存储中的
esa_nav_token,重新登录
- 密码更新后不生效:等待片刻并刷新页面;确保更新的是正确命名空间
相关代码参考:
故障排查
- 读取不到数据或密码: 检查
EDGEKV_NAMESPACE 是否与实际命名空间一致;或确认 KV 中 ADMIN_PASSWORD 是否写入在正确命名空间。
- 保存失败 (401): 检查当前使用的密码与 KV/环境变量一致;确认请求头包含
Authorization: Bearer <密码>;如曾经登陆错误,清除 esa_nav_token 后重试。
代码上传到github上了,自取
foxhound1227/esa_web