【问题标题】:NodeJs server stops responding after 1 responseNodeJs 服务器在 1 个响应后停止响应
【发布时间】:2013-03-13 02:27:45
【问题描述】:
    var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(9000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:9000/');

我有上面的代码来开始使用 nodejs,当我启动进程并在浏览器上运行时,我得到了一次响应,但之后我没有得到任何响应。每次我重新启动时,我都会收到 1 个响应,并且一如既往地停止。我怎样才能让它连续运行。提前致谢!

只是添加与此问题相关的更多信息。这是来自 nginx conf 文件的 sn-p

server {

    listen 80;

    client_max_body_size 2M;


    server_name my_domain;


     root /home/node/My_Folder;
   # access_log  /var/log/nginx.vhost.access.log  main;
    send_timeout 1;

location ~* ^.+\.(jpg|jpeg|JPG|JPEG|GIF|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov|html)$ {
autoindex on;
root /home/node/My_Folder;
expires 30d;

break;
}

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_redirect off;
        #proxy_connect_timeout 50ms;
        #proxy_send_timeout 200ms;
        #proxy_read_timeout 200ms;
        proxy_next_upstream error;
        proxy_pass http://Handler;
        #index no_ads.html no_ads.htm;
        break;
}

}

upstream Handler {
        server 127.0.0.1:8010;
        server 127.0.0.1:8011;
        server 127.0.0.1:8012;
        server 127.0.0.1:8013;
        server 127.0.0.1:8014;
        server 127.0.0.1:8015;
        server 127.0.0.1:8016;
        server 127.0.0.1:8017;
        server 127.0.0.1:8018;
        server 127.0.0.1:8019;
        server 127.0.0.1:9000;
} 

我都试过了

节点 app.js 永远开始 -a app.js

启动应用程序,但无论哪种方式,我都只得到一个响应,然后超时。我确实有几个其他节点应用程序在同一台服务器上运行,这些似乎工作正常。所以我完全迷路了

【问题讨论】:

  • 您的代码看起来不错。你确定这真的发生了吗?您是否使用 wget 或 curl 进行了验证?另请注意,您的 console.log 表示的端口与您实际监听的端口不同...以防万一您输入了该 URL。
  • 布拉德,感谢您的快速响应,端口号已修复,我只是在这里输入时忘记更新代码。但我很确定这就是我正在发生的事情,我尝试过多次停止和启动。但这与只有一种反应一致。我不确定 wget 或 curl 是什么,能否给我发一个链接来指导我完成这个?
  • “一个响应”具体是什么意思?您的意思是当您点击刷新时,无法建立连接?
  • 这是正确的,一旦我启动服务器并访问 url 我得到响应,但是当我刷新时我得到一个网关超时
  • 您的问题不在您的 Node.js 应用程序中。我能告诉你的就这些了。你的问题在别处。

标签: node.js


【解决方案1】:

您的 Node.js 应用程序在端口 9000 上运行。

在您的 NGinx 配置文件中,您有设置

proxy_pass http://Handler;

它将传入的请求重定向到 Node.js 应用程序,但您不是直接将请求重定向到那里,而是重定向到配置如下的上游:

upstream Handler {
    server 127.0.0.1:8010;
    server 127.0.0.1:8011;
    server 127.0.0.1:8012;
    server 127.0.0.1:8013;
    server 127.0.0.1:8014;
    server 127.0.0.1:8015;
    server 127.0.0.1:8016;
    server 127.0.0.1:8017;
    server 127.0.0.1:8018;
    server 127.0.0.1:8019;
    server 127.0.0.1:9000;
}

由于默认情况下 NGinx 对上游使用循环,这意味着 NGinx 有 11 次尝试连接到端口 9000(有效),接下来的 10 次尝试访问不存在的服务器。

因此无法建立连接,您将收到错误消息。

删除 upstream 块中的所有其他服务器条目,完全删除 upstream 块并将单个 Node.js 服务器直接配置为代理,或使用端口 8010、8011、... 和启动其他 Node.js 服务器一切都应该正常。

关于如何配置upstreams的详细信息,请查看NGinx documentation on the HttpUpstreamModule

【讨论】:

  • 感谢 Golo,这似乎已经解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 2021-08-19
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多