2013-09-17 9 views
1

Я запускаю Apache на своем сервере. Переход на мой адрес x.x.x.x: порт загружает страницу index.html в/var/www. Когда я останавливаю сервер, я больше не могу подключаться (все хорошо).Не удается подключиться к серверу nodejs

Теперь я запускаю сервер узлов с node server.js (файл server.js ниже также находится в/var/www).

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

Это дает ошибку listen EADDRNOTAVAIL, но я не работаю какой-либо другой сервер узла (нет другого процесса, работающего в этом порту).

Я также попытался опуская IP-адрес и просто слушать, таким образом: listen(port);

Это не возвращает никаких ошибок, но я не могу подключиться к серверу (Браузер говорит: Firefox can't establish a connection to the server at x.x.x.x:p.)

+0

У меня такое чувство, что вы используете неправильный IP-адрес, проверьте 'ifconfig', чтобы убедиться, что используете тот, который вам кажется. Возможный дубликат: http://stackoverflow.com/questions/6829563/nodejs-error-eaddrnotavail-cannot-assign-requested-address Вы также можете попробовать прослушивать все интерфейсы с помощью '0.0.0.0', если вы опустите имя хоста по умолчанию это '127.0.0.1', так что вы не сможете подключиться удаленно – Chad

+0

@ Я пробовал изменить IP-адрес на тот, который указан в ifconfig, но переход к этому адресу истекает время соединения. – user2787904

+0

Тем, кто пришел сюда через Google: если вы разместили службу в облаке Google и столкнулись с этой проблемой, сначала ** убедитесь, что вы добавили порт в правила исключения из [облачного брандмауэра] (https: // console. cloud.google.com/networking/firewalls), а также в брандмауэре операционных систем ** – Atul

ответ

2

Порт используется или недоступен. Попробуйте другой порт, например:

listen(88, 'x.x.x.x'); 

и посмотрите, подключается ли это. Кроме того, убедитесь, что x.x.x.x на самом деле является IP-адресом вашего сервера. Вы можете прослушивать все IP-адреса, выполнив:

listen(88, '0.0.0.0'); 

или оставив раздел хоста/ip вне целиком. Если он подключается к другому порту, вам просто нужно найти то, что использует порт, который вы хотите. Если это порт 80, используйте:

sudo netstat -tulpn | grep :80 

, чтобы получить программу, используя этот порт.

+0

Я получаю ту же ошибку для любого порта, даже те, которые являются бесплатными. IP является правильным, все отлично работает с Apache. – user2787904

+0

В соответствии с вашим собственным ответом IP * не был * правильным! Вы слушали его и пытались подключиться к другому. Я обновил свой собственный ответ, чтобы разрешить любой IP-адрес. – seumasmac

+0

Принимается с тех пор, как вы упомянули об этом в первую очередь. – user2787904

0

Похоже, порт заблокирован и используется.

Следующая команда даст вам список запущенных процессов узлов.

ps | grep node 

Чтобы освободить этот порт, остановите процесс, используя следующее.

kill <processId> 
+0

Нет другого процесса узла. На самом деле в этом порту ничего не работает. – user2787904

3

Я выяснил, проблема. Вам не нужно указать имя хоста:

listen(port, 'x.x.x.x')

должно быть просто

listen(port)

иначе сервер не будет принимать какие-либо связи, за исключением тех, направленных на указанный IP.

+0

Если IP-адрес не указан, он будет искать соединения только на обратном адресе цикла – Chris

Смежные вопросы