12

Have you managed to make your node + nginx proxy setup on Heroku work?

Could you, please, tell me how have your organized the directories structure and the files in each directory before doing "git push heroku master"? Which buildpack did you use?

I am getting the message "Push rejected, no Cedar-supported app detected" every time I do "git push heroku master". I have put a "nginx.conf.erb" file in a "/conf" directory.

Thank you.

4

3 回答 3

12

我在 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 的完整说明

于 2014-04-27T18:33:54.433 回答
2

在 Heroku 上,一旦安装了 buildpack,我就成功地在生产中使用了这个设置:

upstream node_entry {
    server unix:/tmp/nginx.socket fail_timeout=0;
}
server {
    listen  <%= ENV['PORT'] %>;
    server_name localhost;
    keepalive_timeout 5;
    location / {
        [other settings…]
        proxy_pass http://node_entry;
    }
}

然后,在您的 app.js 文件中,您可以连接:

Server.listen(‘/tmp/nginx.socket’);
于 2015-11-14T19:38:21.173 回答
0

本文包含有关将 nginx 设置为 Heroku的代理以及 OpenResty、Lua 和 LuaRocks 的说明。没有提到 node.js。它使用这个buildpack。自己没有尝试过,但似乎有人已经让它工作了。

于 2013-09-10T18:29:40.657 回答