Не удается получить доступ к экспресс-приложению node с брандмаутера

97
9

Я новичок в создании сетей и назначении портов и вещей такого характера. Я использовал бродягу в течение некоторого времени и никогда не испытывал никаких проблем с попыткой получить тестовую среду, а затем получить доступ к ней через браузер хост-машины. Настройка для этого в моем Vagrantfile такова:


# network stuff
config.vm.network "forwarded_port", guest: 8000, host: 8000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.hostname = "test-box-debian"

Теперь я пытаюсь немного узнать о node.js, и в каждом учебном пособии говорится, что я могу запустить npm start, и это прекрасно работает. Я могу вызвать wget localhost:3000 (порт 3000 по умолчанию используется в выражении) и взамен получить страницу index.html по умолчанию из выражения.


Однако, когда я пытаюсь получить доступ к "192.168.33.10:3000" из браузера хоста, он не работает. Я могу запустить netstat и получить в результате следующее:


sudo netstat -ltpn | grep 3000
tcp6 0 0 :::3000 :::* LISTEN 17238/node

Я вижу, что что-то не выглядит правильным, но я просто недостаточно знаю о портах и ​​сети, чтобы узнать, что не так, и как исправить это.

спросил(а) 2021-01-19T21:09:51+03:00 2 месяца, 3 недели назад
1
Решение
97

Во-первых, убедитесь, что ваш сервер прослушивает правильный IP-адрес и что вы не связали прослушиватель Express в другом месте:


.listen(3000), NOT .listen(3000, '127.0.0.1')


В качестве альтернативы попробуйте привязать Express-сервер к вашему частному IP-адресу или к подстановочному IP-адресу и посмотреть, устраняет ли это ваши проблемы с подключением:

// Wildcard (All IP's) binding
.listen(3000, '0.0.0.0')

// Specific binding
.listen(3000, '192.168.33.10')


Наконец, порт 3000 может быть недоступен с хоста. Если ни один из приведенных выше параметров в коде сервера не работает, попробуйте добавить следующую строку в свой Vagrantfile:


config.vm.network "forwarded_port", guest: 3000, host: 3000

ответил(а) 2021-01-19T21:09:51+03:00 2 месяца, 3 недели назад
88

Убедитесь, что на вашей виртуальной машине нет брандмауэра, блокирующего порт:


sudo iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

Нашел ответ на qaru.site/questions/1598989/....

ответил(а) 2021-01-19T21:09:51+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема