【问题标题】:502 Bad Gateway when using ExpressJS with nginx将 ExpressJS 与 nginx 一起使用时出现 502 Bad Gateway
【发布时间】:2011-07-20 02:14:51
【问题描述】:

如果我像这样运行我的 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 开发控制台中收到以下错误:

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/"

任何指导表示赞赏!

【问题讨论】:

  • 您在 error_log 中看到了什么?
  • 2011/03/22 13:07:59 [error] 10269#0: *18 上游过早关闭连接,同时从上游读取响应标头,客户端:168.229.58.68,服务器:本地主机,请求: “GET /socket.io/xhr-polling//1300799281533 HTTP/1.1”,上游:“127.0.0.1:8080/socket.io/xhr-polling/1300799281533”,主机:“184.73.217.204”,引用者:“184.73.217.204

标签: javascript nginx websocket express nowjs-sockets


【解决方案1】:

试试这个补丁...

 -proxy_pass http://node/;
    +proxy_pass http://node;

【讨论】:

  • wiki.nginx.org/HttpProxyModule#proxy_pass -- 这是文档 如果需要以未处理的形式传输 URI,则应使用指令 proxy_pass 而不使用 URI 部分: location /some/path/ { proxy_pass _http://127.0 .0.1; }
  • 调试了好几个小时,这是一个让我整个应用程序崩溃的可怕斜线。赞成!
  • 天才!!!!我只想说声谢谢,这花了我几个小时和几个小时的调试时间!
  • 我试过了,但它似乎不起作用。有什么智慧之言吗? stackoverflow.com/questions/9256454/…
【解决方案2】:

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

在从各种不同的在线示例中摸索 nginx 服务器块 sn-ps 时,我开始遇到“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;
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2018-08-09
    • 2016-10-23
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多