Назад | Перейти на главную страницу

Настройка HTTP-сервера исключительно на Node.js на порт 80

Я использую свежую установку Centos 5.5. У меня установлен и работает Node (я просто использую Node - без apache или nginx.), Но я не могу понять, как создать простой сервер на 80-м порту. Узел работает и слушает 80-й порт. Я ' m просто используя демонстрационное приложение:

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

Когда я захожу на свой IP, он не работает. Я получил свой ip-адрес с помощью ifconfig. Пробовал разные порты. Так что должно быть что-то мне не хватает.

Что мне нужно настроить на моем сервере, чтобы это работало? Я бы хотел сделать это без установки apache или nginx.

Люк


Изменить. Итак, я установил nginx и запустил его, чтобы узнать, связан ли он с узлом, и я не вижу его страницу приветствия. Так что это определенно связано с сервером.

Правильно ли я получаю IP-адрес, запустив: ifconfig затем чтение inet адрес под eth0?

Вы запускаете его как root? В противном случае вы не сможете выполнить привязку к порту 80.

Что произойдет, если вы измените номер порта на какой-нибудь (свободный) выше 1024?

Также, что произойдет, если вы укажете IP-адрес для прослушивания, как в примере Вот?

Не знаю, беспокоит ли вас это по-прежнему, однако однажды я столкнулся с той же ошибкой на моем Debian 6.0: я мог подключиться к локальному браузеру (на той же машине), используя:

links http://127.0.0.1:80

Тем не мение,

firefox http://[public_ip]:80

с любого другого компьютера в указанную систему Debian привело к "отказу в соединении". Итак, я просто оставил настройку ip внутри своего демонстрационного кода:

//init
var http = require('http');
var port = 8080 ;
var now  = new Date();
// create server
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World - this is node.js\n');
  res.write('Date on server: ' + now.toGMTString());
  res.end('\nbye!');
}).listen(port, "");
console.log('Server running at port: ' + port);

надеюсь, что это поможет, это сделало это для меня. Обратите внимание, что я изменил настройку порта на 8080, потому что на 80-м порту уже был запущен другой сервер.

Как сказано в моем комментарии, код работает (я запускал его как root на FreeBSD).

В Linux 127.0.0.1 (он же localhost) привязан к интерфейсу «lo». Интерфейс "eth0" должен иметь другой IP-адрес.
Остановить узел; выключить nginx (чтобы порт 80 был свободен); вместо этого введите адрес eth0 (а не 127.0.0.1) в приведенный выше код; перезапустите узел и попробуйте снова подключиться к порту 80 на другом IP-адресе.

Подсказка: проверьте с помощью "netstat -ltn", к какому IP-адресу привязан порт 80, и попробуйте подключиться к этому адресу.