Node js Ошибка: прослушайте EADDRNOTAVAIL 52. **. **. ***: 1122 - PullRequest
0 голосов
/ 28 декабря 2018

Node js приложение в локальной сети работает нормально.При попытке запуска на сервере выдает ошибку.

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 ]

0 голосов
/ 28 декабря 2018

Как сказал stundbar, когда вы создаете сервер, вы не должны устанавливать публичный IP-адрес, а 0.0.0.0 или localhost.Не устанавливайте 127.0.0.1, потому что вы не сможете получить к нему доступ за пределами компьютера сервера.

0 голосов
/ 28 декабря 2018

Не пытайтесь прослушивать внешний IP-адрес экземпляра EC2 - он недоступен.Вместо этого слушайте на любом интерфейсе (иногда показан как 0.0.0.0).В соответствии с документами, которые я могу найти, это делается с server.listen без указания параметра хоста:

Если host опущен, сервер будет принимать соединения на неопределенный адрес IPv6 (::), когда доступен IPv6, или неопределенный адрес IPv4 (0.0.0.0) в противном случае.

В большинстве операционных систем прослушивание неопределенный адрес IPv6 (::) может заставить net.Server также прослушивать неопределенный адрес IPv4 (0.0.0.0).

Порт, который вы слушаете, будет доступен из внешнего мира, хотя вам придется выставить его с группой безопасности.

РЕДАКТИРОВАТЬ

Вам необходимо изменить код на:

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}`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...