Я пытаюсь открыть порт 3000 на Ubuntu 12.04, потому что у меня там прослушивает веб-сервер. Я немного не в своей зоне конфорт и провел много часов, пытаясь решить проблему без успеха.
Кажется, порт открыт в брандмауэре:
$> sudo ufw status
Status: active
To Action From
-- ------ ----
...
3000/tcp ALLOW Anywhere
3000/tcp ALLOW Anywhere (v6)
Сервер слушает нормально на этом порту:
$> netstat -an | grep "LISTEN "
...
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN
...
И я могу даже wget
хорошо индексировать страницу:
$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK
И полученный файл содержит то, что я ожидаю («Привет, мир» :).
Тем не менее, при попытке с другого компьютера, или если я wget mydomain.com:3000
получаю "connection refused"
, и Nmap говорит мне, что порт не открыт:
$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux
Любая идея, что я должен попробовать дальше ???
РЕДАКТИРОВАТЬ
Вот что дает traceroute:
$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 hops max, 60 byte packets
1 mydomain.com (176.31.x.x) 0.034 ms 0.013 ms 0.010 ms
traceroute mydomain.com
с удаленного компьютера. Вы можете ** из последних двух октетов последнего (серверного) IP для конфиденциальности.Ответы:
Если ваш сервер прослушивает только интерфейс localhost, вы не сможете получить к нему доступ с удаленного компьютера. Похоже, это ваша основная проблема, поскольку в выводе netstat указан только 127.0.0.1:3000.
Вам также необходимо убедиться, что mydomain.com разрешает правильный IP-адрес для вашей машины, так что подключение к нему приведет к обмену данными с внешним интерфейсом этой машины.
источник
eth0
или что-то в этом роде), IP-адресу (192.168.1.99 или что-то в этом роде) или MAC-адресу. Это зависит от программы.У меня недавно была эта проблема с HTTPS-сервером nodejs, и ее решением было не использовать «localhost», «127.0.0.1» или даже доменное имя. Это было использовать "0.0.0.0"
Я считаю, что это действует как подстановочный знак, теперь позволяет публичное разрешение через доменное имя, и это также работает с "localhost"
Изменить: Вот ссылка на страницу о сбое сервера на тему 0.0.0.0: /server/78048/whats-the-difference-between-ip-address-0-0-0-0-and- 127-0-0-1
источник
}).listen(3000, '127.0.0.1');
чтобы}).listen(3000, '0.0.0.0');
в моем коде.Есть ли вероятность того, что вы используете AWS или другие облачные сервисы? В этом случае порт должен быть открыт на уровне конфигурации Inctance (OS) или после. В частности, в AWS вы должны искать «Группы безопасности», где вы должны открыть доступ к порту 3000
источник