我使用this buildpack在Heroku上使用節點+ nginx設置來提供靜態文件。在靜態資產正常服務的同時,嘗試通過節點投放內容的結果爲502 Bad Gateway
。節點本身工作正常,nginx也是如此。問題是當兩者需要一起工作時,我想這是因爲我沒有配置好nginx upstream
設置。 這是我的nginx conf:502 Heroku中的錯誤網關+ nginx代理設置
worker_processes 1;
error_log /app/nginx/logs/error.log;
daemon off;
events {
worker_connections 1024;
}
http {
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
upstream node_conf {
server 127.0.0.1:<%= ENV['PORT'] %>;
keepalive 64;
}
server {
listen <%= ENV['PORT'] %>;
server_name localhost;
location/{
root html;
index index.html index.htm;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://node_conf;
}
location ~* ^.+\.(jpg|gif|png|ico|css|js|html|htm)$ {
root /app;
access_log off;
expires max;
}
location /static {
root /app;
index index.html index.htm;
}
}
}
。
我_static.cfg
:
SERVER_TYPE="nginx"
BUILD_WEB_ASSETS="true"
。
我的節點服務器:
var app = require('express ')()
app.get('/', function(req, res) { res.send('This is from Node.') })
app.listen(process.env.PORT)
。
我也有一個示例HTML文件中/static
測試是否nginx的工作:
<html>This is from nginx.</html>
。
使用此配置,appname.herokuapp.com
應顯示「這是來自節點」。但是我得到了502
。
appname.herokuapp.com/static
顯示「這是來自nginx」,因爲它應該,所以沒有nginx和靜態內容的問題。
我已經嘗試了nginx server
設置中upstream
的每個值的組合,但都沒有工作。 我還可以嘗試向節點發出nginx代理請求嗎?
這裏是我的Heroku Procfile
的情況下,它可以幫助:web: bin/start_nginx
我試過用nginx的端口80,但Heroku拒絕權限。這是我從你的配置中得到的:'nginx:[emerg] bind()to 0.0.0.0:80 failed(13:Permission denied)' – vjk2005
好吧,就像我說的,不幸的是我沒有Heroku的使用經驗,似乎你需要爲Nginx使用<%= ENV ['PORT']%>。如果將nginx設置爲偵聽127.0.0.1:<%= ENV ['PORT']%>,並在端口4000上保留node.js進程,如同在我發佈的配置中一樣,它會工作嗎? – grenadejumper
我厭倦了與Heroku的BS系統打交道(我聯繫了他們自己沒有線索的支持者),並將他們遷移到數字海洋上的水滴。但是如果我以後回到Heroku,我會給這個鏡頭一個鏡頭。 – vjk2005