静态站点:从文件到域名
落地页或 React、Vue 构建产物的完整路径:把文件上传到 VPS、用 Web 服务器提供访问、绑定域名,并在不停机的情况下更新。
更新于 2026年8月23日
静态站点是一组现成的文件:HTML、CSS、图片、前端构建产物。它既不需要 PHP,也不需要数据库,因此在 VDS-1 上也能轻松运行,并且能承受相当可观的流量:最高 500 Mbit/s。
把文件放在哪里
为每个站点创建单独的目录:
mkdir -p /var/www/example.ru
chown -R www-data:www-data /var/www/example.ru
用普通的 scp 或 rsync 从本地机器上传:
scp -r ./dist/* root@YOUR_ADDRESS:/var/www/example.ru/
rsync -avz --delete ./dist/ root@YOUR_ADDRESS:/var/www/example.ru/
rsync --delete 会删除服务器上已不在构建产物中的文件。没有它,旧的 JS 分块会年复一年地堆积。
通过 Web 服务器提供服务
最小的 Nginx 配置:
server {
listen 80;
server_name example.ru;
root /var/www/example.ru;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
try_files ... /index.html 这一行是 React、Vue 和 Svelte 构建的单页应用所必需的:没有它,直接访问 /about 会返回 404。
接下来是 Let's Encrypt 证书,站点就可以通过 HTTPS 打开了。
域名
在域名面板中,创建一条指向机器公网地址的 A 记录(/hosting/vds/m/<id> 中的“概览”标签页),并为 www 创建同样的记录。检查:
dig +short example.ru
记录生效最多可能需要几个小时。在等待期间,可以通过机器地址访问站点。
无停机更新
不要把文件直接上传覆盖正在运行的目录——访客可能会看到构建到一半的站点。请在旁边构建,然后切换符号链接:
rsync -avz ./dist/ /var/www/releases/$(date +%s)/
ln -sfn /var/www/releases/1724400000 /var/www/example.ru-current
systemctl reload nginx
配置中的 root 随后指向 /var/www/example.ru-current。
常见错误
| 现象 | 原因 |
|---|---|
| 页面空白,控制台中对 JS 报 404 | 文件构建时用了错误的 base——请检查打包工具设置 |
| 部分访客看到旧版本 | 浏览器缓存——请使用带哈希的文件名 |
| 所有请求都返回 403 | 目录对 Web 服务器用户不可读 |
| 只有首页能打开 | 单页应用缺少 try_files |
最好在本地构建前端,然后上传构建好的
dist。在内存为 2 GB 的 VDS-1 上,构建大型项目可能因内存不足而失败。