#google-compute-engine #firewall
#google-compute-engine #брандмауэр
Вопрос:
У меня есть небольшая настройка виртуальной машины GCE с npm и node.js приложение, работающее на порту 8080. Я могу сделать:
«‘curl http://localhost:8080 «‘
и верните страницу индекса, чтобы сервер был запущен.
Я сделал IP-адрес статическим (не эфемерным).
Вот настройки правила фильтрации:
Однако я не могу подключиться извне, и он просто говорит, что сайт недоступен, а сервер отказался подключаться. Я включил ведение журнала для правила брандмауэра, но не вижу там никакого трафика, поэтому озадачен тем, что это может означать. Я предполагаю, что трафик даже не попадает в правило?
Спасибо за любую помощь.
Комментарии:
1. Отредактируйте свой вопрос и покажите свой код, который создает сервер и настраивает прослушивание. Скорее всего, ваш сервер прослушивает
localhost
127.0.0.1
все интерфейсы или вместо0.0.0.0
них.2. Привет, Джон, это было оно. Если вы добавите это в качестве ответа, я подтвержду. Спасибо!
Ответ №1:
Скорее всего, ваш node.js приложение прослушивает localhost
, или 127.0.0.1
(IPv4) или [::1]
(IPv6). Эти адреса назначаются интерфейсу обратной связи, что означает, что принимаются только подключения изнутри компьютера.
Решение заключается в изменении вашего кода для прослушивания всех сетевых интерфейсов. Это определяется как псевдоадрес 0.0.0.0
.
В следующем примере обратите внимание на строку, которая содержит listen(8080, "0.0.0.0");
. Это определяет, какие интерфейсы приложение прослушивает для подключений.
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
}).listen(8080, "0.0.0.0");
console.log('Server is running and listening on all interfaces');