我在 heroku 上为许多项目使用了 Node.js + NGINX 设置。这样,您可以让 nginx 处理提供静态文件、缓存、代理到其他服务器以及代理到多个节点进程。
使用多构建包构建包(https://github.com/ddollar/heroku-buildpack-multi)。
它允许您指定一个引用多个构建包的 .buildpacks 文件。在我的 .buildpacks 文件中,我使用默认的 Heroku Node buildpack,以及我重建的 nginx buildpack 的一个分支,以包含 SSL 支持。
https://github.com/theoephraim/nginx-buildpack.git
https://github.com/heroku/heroku-buildpack-nodejs.git
nginx buildpack 使用可以引用 ENV 变量的 nginx.conf.erb 文件。您必须告诉它在名为“PORT”的环境变量中侦听 heroku 指定的端口
listen <%= ENV["PORT"] %>;
然后你让你的节点服务器在你选择的任何端口上启动,比如 5001,在你的 nginx 配置中,你可以设置一个代理传递给你的节点应用程序:
location / {
proxy_pass http://127.0.0.1:5001;
}
注意 - 您的 procfile 需要使用特殊的 start-nginx 命令(nginx buildpack 的一部分),然后调用您传递的任何其他内容。就我而言,我永远使用它来运行我的节点应用程序:
web: bin/start-nginx ./node_modules/.bin/forever app.js
在您的主节点文件中,您必须在它成功启动后创建一个文件,以向 nginx buildpack 发出它应该开始侦听的信号
fs.openSync('/tmp/app-initialized', 'w');
自述文件@https ://github.com/theoephraim/nginx-buildpack中有关于如何使用 nginx buildpack 的完整说明