工程实践

把静态博客放进 /blog/:路径与部署的正确打开方式

子路径部署不只是挪一个文件夹。理解构建基路径、静态文件映射和回滚,才能避免资源丢失与路由冲突。

静态页面沿清晰的分支路径连接服务器

在已有站点旁增加静态博客,是一种简单且容易维护的内容发布方式。但如果根路径已经运行 API 和控制台,博客必须拥有明确的路径边界。

构建时就声明子路径

Astro 中,site 声明公开站点来源,base 声明应用所在路径。二者不是同一件事。

import { defineConfig } from 'astro/config';

export default defineConfig({
  site: 'https://example.com',
  base: '/blog',
  trailingSlash: 'always',
  output: 'static',
});

配置框架基路径之后,手写链接仍然需要保持一致。/about/ 指向主站;博客的关于页应指向 /blog/about/。搜索索引、图标、代码拆分资源和 canonical 地址都要检查。

Nginx 必须明确映射到文件

一种便于理解的布局是让公开文件位于 /srv/example/current/blog/。Nginx 的 root 会把请求 URI 拼接到根目录后面,因此 /blog/about/ 对应这个目录下的 blog/about/index.html。

# 示例片段:放在已核实的 HTTPS server 块内。
location = /blog {
    return 301 /blog/;
}
location ^~ /blog/ {
    root /srv/example/current;
    index index.html;
    try_files $uri $uri/ =404;
    error_page 404 /blog/404.html;
}

不要直接用这个示例替换现有配置。先确认原有 server、地区限制、认证规则和反向代理位置。尤其注意:server 层的 return 或条件判断可能在进入 location 前就结束请求。

发布一个版本,保留上一个版本

把每次构建上传到独立版本目录,校验完整性后再切换 current 符号链接。这样回滚不需要重新构建,只需要把链接切回旧版本。

Nginx 配置备份也应独立保留。运行 nginx -t 成功后再 reload;失败时恢复备份,不要先重启线上服务再查错误。

验收不能只看首页

  • 直接打开文章链接,检查刷新后是否仍然可用。
  • 检查 CSS、脚本、图标和搜索索引都来自 /blog/。
  • 请求不存在的博客地址,应返回 HTTP 404,而不是主站的单页应用 HTML。
  • 检查 HTTP 到 HTTPS 的跳转、文章 canonical 与 sitemap 地址。
  • 复查主站登录页面、充值入口和 API 的原有行为。

静态页面能访问,不等于搜索引擎一定会收录。公开访问、有效内容和抓取允许是基础,收录时间与结果由搜索引擎决定。

参考资料