把 Hexo 博客部署到 VPS,核心是让 Web 服务器正确读取生成目录。下面是一份供新环境参考的配置笔记,不代表本站线上服务器已按此调整。

先确定文件与服务的边界

Hexo 的源码负责生成页面,Nginx 负责响应请求。只上传 public 内的静态文件,不需要把 node_modules、原始备份和开发工具一起放入网站目录。

本文假设 Nginx 已安装,网站文件放在 /srv/www/myweb。具体安装方式、服务名称和配置文件位置,应按服务器发行版确认。

cat /etc/os-release
nginx -v

配置静态站点

下面的 server 块放在 Nginx 的 http 上下文内。域名和目录都是示例,不能直接覆盖已有站点配置。

server {
listen 80;
server_name blog.example.com;
root /srv/www/myweb;
index index.html;

location / {
try_files $uri $uri/ =404;
}
}

root 指定磁盘目录,index 指定目录首页。Hexo 文章通常生成 posts/文章名/index.html,所以访问文章目录时需要正常解析目录首页。

这里保留真实的 404。静态博客每篇文章有自己的 HTML,无须把所有不存在的地址都返回首页。

修改后先检查配置

sudo nginx -t
sudo nginx -s reload

第一条用于检查语法和引用文件;检查通过后再重新加载。实际服务管理方式可能使用发行版的 systemd 单元。

不要仅验证首页。还应打开一篇文章、刷新文章地址,并检查 CSS、JavaScript、图片与字体是否返回正确内容。

根据现象缩小问题范围

现象 优先检查
首页正常,文章 404 上传目录层级、文章 index.html、location 配置
页面没有样式 资源路径、资源是否上传、响应是否误返回 HTML
403 Forbidden 目录首页、服务用户的目录访问权限
修改配置没有变化 是否加载了正确配置、是否执行 reload

排错时同时看访问日志和错误日志,日志位置以实际配置为准。不要通过给整个目录开放所有权限来绕过问题。

参考资料

选题参考:Sakura Yumine:Linux VPS 服务器环境搭建记录。本文重新组织为静态博客部署笔记,未照搬原文。

配置依据:Nginx Beginner’s Guide、try_files 指令。