代码之家  ›  专栏  ›  技术社区  ›  PvDev

节点js错误:侦听EADDRNOTAVAIL 52.*.*.**:1122

  •  0
  • PvDev  · 技术社区  · 5 年前

    NodeJS应用程序在本地运行良好。尝试在服务器中运行时,会显示错误。

    ubuntu@ip-172-*-*-*:~/sample_nodejs$ node main.js
    events.js:183
    throw er; // Unhandled 'error' event
      ^
    
    Error: listen EADDRNOTAVAIL 52.*.*.*:1122
    at Object._errnoException (util.js:1022:11)
    at _exceptionWithHostPort (util.js:1044:20)
    at Server.setupListenHandle [as _listen2] (net.js:1350:19)
    at listenInCluster (net.js:1408:12)
    at doListen (net.js:1517:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:695:11)
    at startup (bootstrap_node.js:188:16)
    at bootstrap_node.js:609:3
    

    这是我的端口运行状态。使用命令 netstat-tulpn

    (Not all processes could be identified, non-owned process info
    will not be shown, you would have to be root to see it all.)
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       
    PID/Program name
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      
    -
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      
    -
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
    -
    tcp6       0      0 :::22                   :::*                    LISTEN      
    -
    tcp6       0      0 :::80                   :::*                    LISTEN      
    -
    udp        0      0 127.0.0.53:53           0.0.0.0:*                           
    -
    udp        0      0 172.*.*.*:68          0.0.0.0:*                           -
    

    尝试更改iptables

    sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
    

    但它仍然显示了错误。这是服务器故障还是我需要请求服务器端的许可?

    以下是我尝试使用公共ip地址的示例代码:

       var express = require('express');
    
      var app = express();
    
     const http = require('http');
    
      const hostname = '52.*.*.*';
    
      const port = 1122;
    
      const server = http.createServer((req, res) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello, World!\n');
      });
    
      server.listen(port, hostname, () => {
       console.log(`Server running at http://${hostname}:${port}/`);
       });
    
    2 回复  |  直到 5 年前
        1
  •  3
  •   stdunbar    5 年前

    不要尝试侦听EC2实例上的外部IP地址-它不可用。相反,在“any”界面上收听(有时显示为 0.0.0.0 ). 根据我能找到的文件,这是用 server.listen

    host 如果省略,服务器将接受服务器上的连接 unspecified IPv6 address :: )当IPv6可用时,或 unspecified IPv4 address ( 0.0.0.0 )否则。

    在大多数操作系统中,侦听 未指定的IPv6地址 ( )可能导致 net.Server 未指定的IPv4地址 ( ).

    您侦听的端口将可以从外部世界访问,但您必须使用安全组将其公开。

    编辑

    var express = require('express');
    
    var app = express();
    
    const http = require('http');
    
    const port = 1122;
    
    const server = http.createServer((req, res) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello, World!\n');
    });
    
    server.listen(port, () => {
      console.log(`Server running at on port ${port}`);
    });
    
        2
  •  1
  •   DarkScientist_    5 年前

    正如stundbar所说,在创建服务器时,不能设置公共IP,而应设置为0.0.0.0或localhost。 不要设置127.0.0.1,因为您将无法在服务器机器之外访问它。