如何将VPS上自托管Ghost配置到网站子目录并搭配静态站点?
实现Ghost子路径部署 + SSG主站的方案
完全可以把Ghost部署到mycompany.com/blog子路径,同时用Next.js/Gatsby做主站的主页和项目页。下面是具体配置步骤,以及备选方案:
一、子路径部署Ghost的具体操作
1. 修改Ghost核心配置
找到Ghost生产环境的config.production.json(默认路径是/var/www/ghost/config/),修改url和添加paths字段:
{ "url": "https://mycompany.com/blog", "paths": { "subdir": "/blog" }, // 保留原来的数据库、邮件等配置项 }
改完后重启Ghost服务:ghost restart
2. 配置Nginx反向代理
主站(SSG生成的静态文件或SSR服务)和Ghost的路由都通过Nginx转发,配置示例:
server { listen 80; server_name mycompany.com; # 处理SSG主站的根路径请求 location / { root /var/www/my-ssg-site/build; # 替换成你的SSG构建产物路径 try_files $uri $uri/ /index.html; # SPA模式的路由 fallback # 如果是Next.js SSR,改成 proxy_pass http://localhost:3000; } # 代理Ghost到/blog路径 location /blog/ { proxy_pass http://localhost:2368/; # Ghost默认运行在2368端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; } }
注意proxy_pass末尾的/不能丢,否则路径会拼接错误。配置完重启Nginx:sudo systemctl restart nginx
3. 验证
访问mycompany.com应该加载SSG的主页,mycompany.com/blog能正常打开Ghost的博客和后台(后台路径是mycompany.com/blog/ghost)。
二、如果子路径配置遇到兼容问题,试试这些替代方案
方案1:子域名Ghost + 主站导航跳转
保留现有blog.mydomain.com的Ghost部署,在Next.js/Gatsby主站的导航栏加个「博客」按钮,直接跳转到子域名。这种方式零配置成本,只要保持主站和博客的视觉风格一致就行,适合不想折腾反向代理的情况。
方案2:把Ghost当无头CMS,用SSG渲染博客内容
启用Ghost的Content API(默认开启),在Next.js/Gatsby里直接拉取博客内容,在mycompany.com/blog路径下渲染,完全不用单独跑Ghost的前端。步骤如下:
- 在Ghost后台「Integrations」里新建一个自定义应用,拿到API密钥和API地址;
- 在SSG项目里装对应的插件(比如Gatsby用
gatsby-source-ghost,Next.js用next-ghost),配置好API参数; - 写页面组件,调用API获取博客列表、详情,生成
/blog下的页面。
这种方式的好处是所有内容都在同一个域名下,而且Ghost只做内容管理,能节省VPS内存(对你的1GB内存机器更友好)。
内容的提问来源于stack exchange,提问作者Govind
相关产品推荐
相关产品推荐

