您是否设法在Heroku上设置节点+ nginx代理?
请你告诉我在执行“git push heroku master”之前你是如何组织目录结构和每个目录中的文件的?你使用了哪个buildpack?
每次我执行“git push heroku master”时,我都会收到“推送被拒绝,没有检测到Cedar支持的应用”的消息。我在“/ conf”目录中放了一个“nginx.conf.erb”文件。
谢谢。
答案 0 :(得分:8)
我在heroku上使用了一个Node.js + NGINX设置用于许多项目。 这样,您就可以让nginx处理静态文件,缓存,代理到其他服务器,以及代理多个节点进程。
使用multi-buildpack buildpack(https://github.com/ddollar/heroku-buildpack-multi) 它允许您指定一个引用多个buildpack的.buildpacks文件。 在我的.buildpacks文件中,我使用默认的Heroku Node buildpack,以及我重建的包含SSL支持的nginx buildpack的分支。
https://github.com/theoephraim/nginx-buildpack.git
https://github.com/heroku/heroku-buildpack-nodejs.git
nginx buildpack使用可引用ENV vars的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');
有关如何在自述文件中使用nginx buildpack的完整说明@ https://github.com/theoephraim/nginx-buildpack
答案 1 :(得分:0)
此article包含有关在Heroku上将nginx设置为代理的说明,以及OpenResty,Lua和LuaRocks。 node.js没有提到。它使用此buildpack。没有尝试过,但似乎有人已经开始工作了。
答案 2 :(得分:0)
在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’);