Próbuję otworzyć port 3000 w systemie Ubuntu 12.04, ponieważ mam tam serwer sieci Web, który nasłuchuje. Jestem trochę poza strefą komfortu i spędziłem wiele godzin, próbując rozwiązać problem bez powodzenia.
Port wydaje się być otwarty w zaporze:
$> sudo ufw status
Status: active
To Action From
-- ------ ----
...
3000/tcp ALLOW Anywhere
3000/tcp ALLOW Anywhere (v6)
Serwer nasłuchuje na tym porcie:
$> netstat -an | grep "LISTEN "
...
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN
...
I mogę nawet wget
poprawić stronę indeksu:
$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK
A otrzymany plik zawiera to, czego oczekuję („witaj świecie” :).
Jednak, gdy próbuję z innego komputera, lub jeśli wget mydomain.com:3000
dostaję "connection refused"
, a nmap mówi mi, że port nie jest otwarty:
$> 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
Masz pomysł, co powinienem wypróbować?
EDYTOWAĆ
Oto, co daje 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
z komputera zdalnego. Możesz ** wykorzystać dwa ostatnie oktety ostatniego adresu IP (serwera) dla zachowania prywatności.Odpowiedzi:
Jeśli twój serwer nasłuchuje tylko na interfejsie localhost, nie będziesz mógł uzyskać do niego dostępu ze zdalnego komputera. Wydaje się, że jest to twój główny problem, ponieważ tylko 127.0.0.1:3000 jest wymienione w wynikach netstat.
Musisz także upewnić się, że „mydomain.com” rozpoznaje poprawny adres IP komputera, tak że połączenie z nim spowoduje komunikację z zewnętrznym interfejsem tego komputera.
źródło
eth0
lub coś w tym rodzaju), adres IP (192.168.1.99 lub coś w tym rodzaju) lub adres MAC. To zależy od programu.Ostatnio miałem ten problem z serwerem HTTPS firmy nodejs, a rozwiązaniem tego problemu nie było użycie „localhost”, „127.0.0.1” ani nawet nazwy domeny. Miało to być „0.0.0.0”
Uważam, że działa to jak symbol wieloznaczny, pozwalając teraz na publiczne rozpoznawanie za pomocą nazwy domeny i działa również z „localhost”
Edycja: Oto link do strony błędu serwera na temat 0.0.0.0: /server/78048/whats-the-difference-between-ip-address-0-0-0-0-and- 127–0–0–1
źródło
}).listen(3000, '127.0.0.1');
aby}).listen(3000, '0.0.0.0');
w moim kodu.Czy jest jakaś szansa, że korzystasz z AWS lub innej usługi w chmurze? W takim przypadku port powinien zostać otwarty na poziomie konfiguracji systemu operacyjnego lub później. W szczególności w AWS powinieneś szukać „grup bezpieczeństwa”, w których powinieneś otworzyć dostęp do portu 3000
źródło