以你手上的归档包 html-archive(索引页 + 子目录页面)为例。三种方式发布的都是同一份文件夹,区别只在「放在谁的机器上、谁来对外提供访问」。先看总览,再挑一种照着做。
三种方式,一份文件,区别在托管方
| Cloudflare Pages | VPS | NAS | |
|---|---|---|---|
| 成本 | 免费额度足够个人用 | 已有 VPS 则为 0 | 已有 NAS 则为 0 |
| 难度 | 最低,网页点几下 | 中,要敲几条命令 | 低(局域网)/中(外网) |
| 维护 | 无,平台托管 | 自己管服务器 | 自己管机器和网络 |
| 大陆访问 | pages.dev 经常打不开或很慢 | 看线路,海外机普遍一般;国内机需备案 | 局域网最快;外网取决于你家宽带和穿透方式 |
| 适合 | 对外分享、自查,快速上线 | 长期自有站点、可控性最高 | 家庭内看、和原始文件放一起 |
原理:把文件夹交给 Cloudflare 的全球静态托管,平台负责 HTTPS 证书、CDN 和可用性,你只负责上传。两种上传方式选一种即可。
my-archive。名字将决定默认网址:my-archive.pages.dev(只能用小写字母、数字和连字符)。my-archive.pages.dev/k11-select/。html-archive/ 再是文件,发布后访问路径会变成 …/html-archive/k11-select/,根路径打开是空白目录页。解决:打包时只打文件夹里面的内容(index.html 位于 zip 根部),或者解压后直接拖文件夹里的内容上传。# 一次性准备
npm install -g wrangler
wrangler login # 浏览器里授权一次
# 每次发布/更新只用这一条(在归档文件夹的上一级执行)
wrangler pages deploy ./html-archive --project-name my-archive
第一次执行会自动创建项目,之后每次执行就是一次新部署,几十秒生效。新增页面后重新跑一遍即可。
archive.example.com。my-archive.pages.dev。原理:VPS 上装一个轻量 Web 服务器 Caddy,把文件夹指给它。Caddy 的好处是 HTTPS 证书全自动申请和续期,不用碰 certbot。下面以 Debian / Ubuntu 为例。
archive.example.com;没有域名也能先用 IP 访问,但没有 HTTPS,建议配域名。ssh root@你的服务器IPapt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddyrsync -avz ./html-archive/ root@你的服务器IP:/var/www/html-archive//etc/caddy/Caddyfile,写入:
archive.example.com {
root * /var/www/html-archive
file_server
encode gzip
}archive → 指向 VPS 公网 IP,等解析生效(几分钟)。systemctl reload caddy。Caddy 会自动向 Let's Encrypt 申请证书。https://archive.example.com,看到索引页即成功;单个页面是 https://archive.example.com/k11-select/ 这样的地址。# 在服务器上生成密码哈希,会让你输入一次密码
caddy hash-password
# 把结果填进 Caddyfile 对应站点块里:
archive.example.com {
root * /var/www/html-archive
file_server
encode gzip
basic_auth {
core <上一步生成的哈希值>
}
}
改完照样 systemctl reload caddy。之后访问会先弹浏览器自带的账号密码框。
只有一条命令(本机执行),传完即生效,不用重启任何东西:
rsync -avz --delete ./html-archive/ root@你的服务器IP:/var/www/html-archive/
可以把这条命令存成一个 deploy.sh 脚本,以后双击/一行运行。已经习惯用 Nginx 的话也一样:把 server 块的 root 指向同一目录即可,证书用 certbot 签,步骤比 Caddy 多两步,其余相同。
curl -I http://archive.example.com 确认能通到 Caddy 再排查。国内云厂商的 VPS 用域名对外提供网页服务需要 ICP 备案,没备案会被拦截,这不是配置问题。NAS 有三种由简到繁的玩法。只是家里看,第一种就够;想在浏览器里像个正经站点一样打开,用第二种;想从外网也能访问,再看最后的「外网访问」。
html-archive 整个文件夹拷进 NAS 任意共享文件夹(如 文档/页面归档/)。index.html;手机上用 DS file 等 App 找到它、用浏览器打开。缺点:部分手机 App 内打开会跳转或渲染不全,相对路径图片偶尔加载异常。适合临时看,不适合当长期入口。
web 的共享文件夹。把归档内容放进去,新建子文件夹如 web/archive/,把 html-archive 里的文件放进 archive(注意同样是放「内容」,别多套一层)。http://群晖IP/archive/,就是索引页。到这一步已经能用了。web/archive,填一个域名(如你 DDNS 的子域名),之后用域名直接打开根路径。web/archive/ 里覆盖文件即可,刷新浏览器生效,不用重启服务。威联通(QNAP)对应的是「Web 服务器」功能(控制台里开启,网站根目录是 Web 共享文件夹),思路完全一样。极空间、绿联等新品牌 NAS 一般用下面的 Docker 路线。
/volume1/web/archive(群晖)或其他品牌对应的数据目录。services:
web:
image: caddy:alpine
ports:
- "8080:80"
volumes:
- /volume1/web/archive:/usr/share/caddy # 左边改成你 NAS 上的实际路径
restart: unless-stopped
http://NAS的IP:8080 即可。想换端口改左边的 8080。用 nginx:alpine 也可以,把挂载目录改成 /usr/share/nginx/html,其余相同。
cloudflared 容器,把内网的 http://localhost:8080 映射到你的域名,全程不需要公网 IP、不开任何端口,Cloudflare 负责入口和 HTTPS。等于「用你现有的 CF 账号给 NAS 开个安全门」。九成是「多套了一层文件夹」:实际路径成了 /html-archive/index.html 而不是 /index.html。检查发布根目录下是否直接躺着 index.html,不是就把内容上提一层重新发布。
图片是相对路径(如 assets/xxx.png),说明 assets 文件夹没跟着一起传,或被单独挪了位置。整体复制页面文件夹,别只拷 index.html。
先强制刷新(Ctrl+F5)。Pages 有 CDN 缓存,一般几分钟内全网生效;VPS/NAS 直出的话刷新即可,若还旧,检查是不是传错了目录。
子目录名就是网址的一部分,把文件夹名起短一点即可,如 /k11/。索引页里的链接记得同步改。
三步:① 根目录新建文件夹放入页面;② 在索引页 index.html 里照格式加一张卡片;③ 按你选的方式重新发布/同步一次。不想手动改索引页的,跟我说一声,我生成页面时顺手把包一起更新。