Работа с NodeJs и vagrant

У меня есть этот Vagrantfile

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.network "forwarded_port", guest: 80, host: 3000
  config.vm.network "private_network", ip: "192.168.33.11"
end

Моя цель - запустить виртуальную машину для nodejs. Я правильно установил node. После «vagrant ssh» я создал файл «index.js» с таким содержимым:

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

От vagrant@precise32:/vagrant$, когда я запускаю "curl localhost:3000", я получаю "Hello world". Но, ...

Что мне нужно сделать, чтобы открыть браузер на моем локальном компьютере и получить тот же «Hello world»?


Если я попытаюсь "свернуть" ip моей виртуальной машины, я получаю это:

$ curl 192.168.33.11:3000
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused

Попытка телнета:

$ telnet 192.168.33.11:3000
Trying 192.168.33.11:3000...
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused

попытка curl --verbose Все еще не работает с портом 3000

$ curl --verbose 192.168.33.11:3000
* About to connect() to 192.168.33.11 port 3000 (#0)
*   Trying 192.168.33.11...
* Adding handle: conn: 0x7f8f5a803a00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f8f5a803a00) send_pipe: 1, recv_pipe: 0
* Failed connect to 192.168.33.11:3000; Connection refused
* Closing connection 0
curl: (7) Failed connect to 192.168.33.11:3000; Connection refused

Отлично работает с портом 80

$ curl --verbose 192.168.33.11
* About to connect() to 192.168.33.11 port 80 (#0)
* Trying 192.168.33.11...
* Adding handle: conn: 0x7fc93b802000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fc93b802000) send_pipe: 1, recv_pipe: 0
* Connected to 192.168.33.11 (192.168.33.11) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.30.0
> Host: 192.168.33.11
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 07 Jul 2014 07:06:25 GMT
* Server Apache/2.2.22 (Ubuntu) is not blacklisted
< Server: Apache/2.2.22 (Ubuntu)
< Last-Modified: Sun, 06 Jul 2014 13:53:47 GMT
< ETag: "4811a4-bb-4fd86b009e369"
< Accept-Ranges: bytes
< Content-Length: 187
< Vary: Accept-Encoding
< Content-Type: text/html
< X-Pad: avoid browser bug
<
<html><body><h1>It works un casino!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
* Connection #0 to host 192.168.33.11 left intact

person sensorario    schedule 06.07.2014    source источник
comment
Вы можете телнетить виртуальную машину? Попробуйте также перезапустить его один раз.   -  person walmik    schedule 06.07.2014
comment
Что ж, если апач встанет, я могу скручиваться и телнетить. Если я остановлю apache,... когда я запускаю скрипт nodejs,... я не смогу получить доступ к vagrant из своего веб-браузера: -/   -  person sensorario    schedule 06.07.2014
comment
Вы используете Centos на своей виртуальной машине?   -  person walmik    schedule 06.07.2014
comment
Неа. Является ли Ubuntu точной 32-разрядной версией.   -  person sensorario    schedule 06.07.2014
comment
Хм, возможно, вы уже сделали это, но не могли бы вы попробовать curl с параметром --verbose. Я также попытался бы настроить базовую HTML-страницу и запустить простой http-сервер Python и свернуть его, чтобы проверить, относится ли эта проблема к Node.js.   -  person walmik    schedule 06.07.2014
comment
Я обновил свой вопрос полным выводом curl --verbose.   -  person sensorario    schedule 07.07.2014


Ответы (2)


Если 192.168.33.11 — это IP-адрес узла, на котором запущена виртуальная машина, то обычно вы загружаете 192.168.33.11:3000 на свой локальный компьютер. Ошибка curl 7 означает, что запрос заблокирован в случае брандмауэра.

person walmik    schedule 06.07.2014

Хотя это старый вопрос, вот решение для тех, кто наткнулся на него в более новых версиях Node/Vagrant.

Похоже, Node больше не требует переадресации портов для работы через Vagrant. Фактически, у меня не работала конфигурация перенаправленного порта, когда сам пример Node работал на 127.0.0.1 в виртуальной машине.

Вместо этого запустите сервер Node на частном сетевом IP-адресе, указанном в вашем Vagrantfile. В приведенном выше примере это соответствует listen(3000, '192.168.33.11');.

У меня работало на Node 4.2.6 и Vagrant 1.8.7 как на Win 10, так и на macOS Mavericks.

person Max    schedule 22.11.2016