Node.js ไม่สามารถเข้าถึงได้จาก IP ภายนอกบน Ubuntu


18

ฉันแน่ใจว่านี่เสียงดังมากโปรดยกโทษให้ฉัน ฉันพยายามเรียกใช้เซิร์ฟเวอร์ node.js บนพอร์ต 8080 ของ ubuntu 10.04 ของฉัน

นี่คือผลลัพธ์ของ iptables -L บนเซิร์ฟเวอร์:

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

และนี่คือผลลัพธ์ของ nmap -p 8080 (แก้ไขที่อยู่ IP เพราะทุกอย่างเปิดกว้าง)

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

ทำไมในโลกถึง 8080 ถูกมองว่าปิด การเพิ่มสิ่งนี้ไม่ได้ช่วย:

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

ฉันสับสนจริงๆ

ฉันจะเพิ่มสิ่งนี้ในกรณีที่มันช่วยได้ แต่ฉันไม่รู้

 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

ฉันสามารถเข้าถึงเว็บไซต์ปกติที่มีพอร์ต 80 บน apache ได้ แต่เซิร์ฟเวอร์ node.js ไม่สามารถเข้าถึงได้จากภายนอก การเข้าถึงจากเซิร์ฟเวอร์ทำงานได้ดี

ดังนั้นคำถามของฉันคือฉันจะแก้ไขข้อบกพร่องนี้ได้อย่างไร อาจมีอย่างอื่นที่นอกเหนือจาก iptables ปิดกั้นบางพอร์ตหรือไม่? ฉันจะรู้ได้อย่างไรว่ามันคืออะไร?

ความช่วยเหลือใด ๆ ที่ชื่นชมมาก!


สำหรับผู้ที่มาที่นี่ผ่านทาง Google: หากคุณโฮสต์บริการบน Google Cloud และประสบปัญหานี้อันดับแรกตรวจสอบให้แน่ใจว่าคุณได้เพิ่มพอร์ตในกฎข้อยกเว้นของไฟร์วอลล์บนคลาวด์รวมถึงในไฟร์วอลล์ระบบปฏิบัติการ
Atul

คำตอบ:


30

ขอบคุณที่เพิ่ม Netstat เอาท์พุทล่าสุดมันช่วยได้จริงๆ คุณไม่สามารถเข้าถึง node.js จากภายนอกเพราะกำลังฟังบน localhost IP เช่น 127.0.0.1 คุณต้องกำหนดค่า node.js เพื่อฟัง 0.0.0.0 เพื่อให้สามารถรับการเชื่อมต่อกับ IP ทั้งหมดของเครื่องของคุณ

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/');

ฉันสงสัยว่า แต่ไม่เคยเจอ 0.0.0.0 มาก่อนเลยไม่สนใจมัน ฉันใช้การแก้ไขของคุณและนั่นก็ขอบคุณ!
Mikael Gramont

ฉันยังมีปัญหานี้ ฉันติดตามโค้ดนี้แล้ว แต่เซิร์ฟเวอร์ nodejs ของฉันยังคงไม่สามารถเข้าถึงได้จากภายนอก
xybrek

ใช่เหมือนกันที่นี่

1
ไม่ทำงานสำหรับฉัน
Jitendra Pancholi

ใช้งานไม่ได้กับฉันใน MacOS Sierra กับ Node v8.1.3
Liran H

4

ตามเอาต์พุต netstat ของคุณพอร์ต 8080 เปิดเฉพาะ 127.0.0.1 ซึ่งเป็น localhost ดังนั้นการเข้าถึงจากเซิร์ฟเวอร์จะทำงาน (ซึ่งเป็น localhost) แต่ไม่ใช่จากที่อื่น

ผลลัพธ์ที่ถูกต้องควรมีลักษณะดังนี้

0.0.0.0:8080

0

ฉันมีปัญหาเดียวกัน

ฉันทำสิ่งต่อไปนี้

  1. ใน Google Cloud Console คุณต้องเปิดใช้งานพอร์ตที่คุณใช้สำหรับ Nodejs
  2. ใช้ลิงก์ต่อไปนี้เพื่อเปิดใช้งานพอร์ตเดียวกันบนเซิร์ฟเวอร์ Ubuntu https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04

  3. และหลังจากนี้สิ่งสุดท้ายที่ฉันหายไปคือระบบเครือข่าย -> กฎไฟร์วอลล์ -> ค่าเริ่มต้นอนุญาตภายใน -> ที่อยู่ IP ทั้งหมด 0.0.0.0/0

เห็นภาพนี้

เสร็จสิ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.