Không thể truy cập Node.js từ các IP bên ngoài trên Ubuntu


17

Tôi chắc chắn điều này rất vớ vẩn, vì vậy hãy tha thứ cho tôi. Tôi đang cố gắng chạy một máy chủ node.js trên cổng 8080 trên Ubuntu 10.04 của tôi.

Đây là kết quả của iptables -L trên máy chủ:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Và đây là kết quả của nmap -p 8080 (đã chỉnh sửa địa chỉ IP vì mọi thứ đều hoặc nên mở rộng)

nmap 173.203.xxx.xxx -p 8080 -A

Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-19 22:52 PDT
Interesting ports on xxx (173.203.xxx.xxx):
PORT     STATE  SERVICE    VERSION
8080/tcp closed http-proxy

Tại sao trên trái đất là 8080 được coi là đóng cửa? Thêm điều này không giúp được gì:

iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT

Tôi thực sự bối rối.

Tôi sẽ thêm cái này, trong trường hợp nó có ích, nhưng tôi không biết

 netstat -pan | grep 80
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN          16785/node      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16471/apache2

Tôi có thể truy cập trang web thông thường của mình chạy từ cổng 80 trên apache, nhưng máy chủ node.js không thể truy cập được từ bên ngoài. Truy cập nó từ máy chủ hoạt động tốt.

Vì vậy, câu hỏi của tôi là: làm thế nào tôi sẽ gỡ lỗi này? Có thể có cái gì khác ngoài iptables chặn một số cổng? Làm thế nào để tôi tìm ra nó là gì?

Bất kỳ trợ giúp nhiều đánh giá cao!


Đối với những người đã đến đây thông qua Google: Nếu bạn đã lưu trữ dịch vụ trên Google cloud và gặp phải vấn đề này, trước tiên hãy đảm bảo bạn đã thêm cổng theo quy tắc ngoại lệ của tường lửa đám mây cũng như trong tường lửa của hệ điều hành
Atul

Câu trả lời:


29

Cảm ơn vì đã thêm đầu ra netstat cuối cùng, nó thực sự hữu ích. Bạn không thể truy cập node.js từ bên ngoài vì nó đang nghe trên IP localhost tức là 127.0.0.1. Bạn cần định cấu hình node.js để nghe trên 0.0.0.0 để nó có thể chấp nhận kết nối trên tất cả các IP của máy của bạn.

var http = require('http');

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

Tôi đã nghi ngờ điều đó, nhưng chưa bao giờ bắt gặp 0,0.0.0 trước đó, vì vậy đã bỏ qua nó. Tôi đã áp dụng sửa chữa của bạn, và điều đó đã làm nó, cảm ơn!
Mikael Gramont

Tôi cũng gặp vấn đề này. Tôi đã theo mã này nhưng máy chủ nodejs của tôi vẫn không thể truy cập được từ bên ngoài.
xybrek

Vâng, giống nhau ở đây.

1
không làm việc cho tôi
Jitendra Pancholi

Không hoạt động với tôi trên MacOS Sierra với Node v8.1.3
Liran H

4

Theo đầu ra netstat của bạn, cổng 8080 chỉ mở cho 127.0.0.1 là localhost, do đó truy cập từ máy chủ hoạt động (là localhost), nhưng không phải từ bất kỳ nơi nào khác.

Đầu ra đúng sẽ trông như

0.0.0.0:8080

0

Tôi gặp vấn đề tương tự.

Tôi đã làm như sau

  1. Trong Google Cloud Console, bạn cần kích hoạt các cổng mà bạn đang sử dụng cho Nodejs
  2. sử dụng liên kết sau để bật các cổng tương tự trên Ubuntu Server https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ub Ubuntu- 14-04

  3. Và sau cái cuối cùng tôi thiếu là Mạng -> Quy tắc tường lửa -> mặc định cho phép nội bộ -> tất cả địa chỉ IP 0.0.0.0/0

xem hình ảnh này

Làm xong

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.