10

如果我像这样运行我的 expressjs 应用程序:coffee server.coffee并导航到localhost:8080,一切正常。

但是,当我使用以下配置使用 nginx 反向代理 8080 时:

server {
    listen 0.0.0.0:80;
    server_name localhost;
    access_log /var/log/nginx/nodetest.log;

    location / {
      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_pass http://node/;
      proxy_redirect off;
    }
}

upstream node {
    server 127.0.0.1:8080;
}

我在 Chrome Dev 控制台中收到以下错误:

GET http://184.73.217.204/socket.io/xhr-polling//1300750540040 502 (Bad Gateway)

以及 nginx 中的以下内容error.log

2011/03/22 13:07:59 [error] 10269#0: *18 upstream prematurely closed connection while
reading response header from upstream, client: 168.229.58.68, server: localhost, 
request:     "GET /socket.io/xhr-polling//1300799281533 HTTP/1.1", upstream:     
"http://127.0.0.1:8080/socket.io/xhr-polling/1300799281533", host: "184.73.217.204",    
referrer: "http://184.73.217.204/"

任何指导表示赞赏!

4

2 回答 2

24

试试这个补丁...

    -proxy_pass http://node/;
    +proxy_pass http://node;
于 2011-03-22T13:19:42.957 回答
2

我是使用nginxand foreverwith nodejs/设置 VMS 的新手meanjs。我的目标是配置一个代理,以便能够在默认端口 80 上而不是从端口 3000 上为我的应用程序提供服务。

在摸索来自各种不同在线示例的 nginx 服务器块片段时,我开始遇到“502 Bad Gateway”错误。通过大量的反复试验,我终于能够解决这种情况。

最后,看似等效的forever开始使用方式node最终得到了截然不同的结果。

什么会导致 502 Bad Gateway:

当使用节点脚本的绝对路径从服务器的根目录发出时,此命令失败并返回 502:

$ cd /
$ sudo forever start --spinSleepTime 10000 /var/www/mydomain.com/server.js

实际上,如果node根本没有运行,我也会收到 502 错误。

什么有效:

两种可行的方法是forever从我的项目的根目录开始而不指定节点脚本的路径(只是文件名),或者再次从服务器的根目录开始但使用以下sourceDir选项:

$ cd /var/www/mydomain.com
$ sudo forever start --spinSleepTime 10000 server.js

或者:

$ cd /
$ sudo forever start --spinSleepTime 10000 --sourceDir /var/www/shotplot.info/ server.js

为了完整起见,我还将包括 nginx 服务器块,以防有助于提供一些额外的上下文:

upstream nodejs \{
        server 127.0.0.1:3000;
}
server {
        root /var/www/mydomain.com;
        server_name mydomain.com www.mydomain.com;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://nodejs;
                proxy_redirect off;
        }
}
于 2014-11-18T04:19:20.793 回答