如何在AWS Elastic Beanstalk Node.js应用中安装Ghost CMS实现/blog访问
方案可行性结论
该方案完全可行,无需额外采购服务器,在现有AWS Elastic Beanstalk单实例环境内即可实现双服务同时运行、通过/blog子路径访问Ghost CMS的需求。
具体实现步骤
- 第一步:完成Ghost子路径适配配置
这是代理失效的核心原因,Ghost默认适配根路径访问,需修改Ghost安装目录下的config.production.json配置:
将url字段值修改为你的完整博客路径"url": "https://mydomain.com/blog",无需额外修改其他静态资源路径配置,Ghost会自动根据该字段生成带/blog前缀的资源链接。 - 第二步:配置同进程双服务启动
安装npm包concurrently实现启动时同时拉起主应用和Ghost服务,在项目package.json的scripts字段中新增启动命令:"start": "concurrently \"node 你的主应用启动文件.js\" \"cd ./ghost安装目录 && ghost run\""
注意将Ghost代码放在主应用目录内,随主应用代码一起打包部署到EB环境。 - 第三步:配置EB环境Nginx反向代理规则
按AWS Elastic Beanstalk的约定添加自定义Nginx配置,不要直接修改全局Nginx文件:
在项目根目录新建.platform/nginx/conf.d/elasticbeanstalk/00_blog_proxy.conf文件,写入以下配置:
EB部署时会自动加载该配置,主应用其他路径仍正常走原有1337端口转发规则,互不干扰。location ^~ /blog { proxy_pass http://127.0.0.1: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; } - 第四步:验证端口权限
确认EB实例安全组未禁止本地回环访问2368端口,默认配置下本地回环访问都是放行状态,如有异常可添加一条入站规则,允许源地址127.0.0.1访问2368端口即可。
可选替代方案(无需修改Nginx配置)
如果不想调整EB平台级Nginx配置,也可以直接在主Node应用中用代理中间件实现转发:
安装http-proxy-middleware包,在主应用路由中添加以下代码:
const { createProxyMiddleware } = require('http-proxy-middleware'); app.use('/blog', createProxyMiddleware({ target: 'http://127.0.0.1:2368', changeOrigin: true }))
该方案效果和Nginx代理一致,更适合小型应用快速配置。
常见问题排查
- 代理后页面样式丢失、后台无法进入:100%是Ghost的
url字段配置错误,确认该字段值为带/blog后缀的完整公网访问地址。 - 服务启动失败:如果实例配置为t2.micro及以下规格,建议配置1G左右的swap分区,双Node服务运行总内存占用约500M,常规低配实例可正常运行。
内容的提问来源于stack exchange,提问作者caridina
相关产品推荐
相关产品推荐

