จะเข้าถึงเซิร์ฟเวอร์ NodeJS บน LAN ได้อย่างไร


16

ฉันไม่ใช่คนที่มีความรู้มากที่สุดที่เคยมีเครือข่าย แต่ที่นี่ไป ...

ฉันสร้างแอปพลิเคชันด้วย NodeJS และฉันต้องการทดสอบแอปพลิเคชันบน LAN ของฉันกับครอบครัวของฉัน การประยุกต์ใช้ฟังบนพอร์ต1337สำหรับการเชื่อมต่อและฉันสามารถเข้าถึงการปรับประยุกต์ใช้ผ่านเครื่องคอมพิวเตอร์ของตัวเองโดยการพิมพ์localhost:1337, 192.168.0.3:1337หรือแม้กระทั่งhttp://joel-pc:1337/ในแถบที่อยู่เบราว์เซอร์ของฉัน

ฉันจะใช้ apache ข้างๆ NodeJS และฉันสามารถเข้าถึง fine นี้ได้โดยพิมพ์192.168.0.3หรือhttp://joel-pc/ลงในแถบที่อยู่ของเบราว์เซอร์ตราบใดที่มันเชื่อมต่อกับเครือข่ายเดียวกัน

ตอนนี้เป็นส่วนที่แปลก ถ้าผมหยุดให้บริการ Apache เปลี่ยนการประยุกต์ใช้โหนดของฉันที่จะฟังพอร์ต80(http) insted ของ1337มันจะสามารถเข้าถึงได้บนเครื่องคอมพิวเตอร์ของฉันโดยการพิมพ์localhost, 192.168.0.3หรือแม้กระทั่งhttp://joel-pcในแถบที่อยู่เบราว์เซอร์ของฉัน อย่างไรก็ตามฉันยังไม่สามารถเข้าถึง NodeJS บนพีซีเครื่องอื่นบนเครือข่ายของฉันนอกเหนือจากของฉันเอง

ฉันพยายามสร้างกฎขาออกภายใน Windows 7 เพื่ออนุญาตการเข้าถึงพอร์ต 1337 แต่ฉันยังคงไม่สามารถเข้าถึงเซิร์ฟเวอร์ NodeJS ของฉันบนพีซีเครื่องอื่นที่ไม่ใช่ของตัวเองแม้ว่ามันจะฟังบนพอร์ต 80 มีบางสิ่งที่ชัดเจน ฉันพลาดที่นี่


2
ถ้าหากเป็นเพียงการทดสอบคุณจะปิดไฟร์วอลล์ของคุณ?
cheesemacfly

1
หากฉันปิดไฟร์วอลล์ฉันสามารถเข้าถึงโหนดได้อย่างสมบูรณ์ขอบคุณ :) แต่แน่นอนว่าต้องมีวิธีที่ปลอดภัยกว่าในการทำสิ่งต่าง ๆ หรือไม่
Joel Murphy

1
ตอนนี้ฉันได้ใส่กลับไปแล้วไม่ต้องกังวล :) ฉันควรโพสต์ที่นี่ด้วยหรือไม่ หรือมีวิธีในการย้ายคำถามของฉันไป? ขอบคุณ
Joel Murphy

2
ไชโย ฉันทำเครื่องหมายด้วยเช่นกันเพราะฉันอ่านในเธรดอื่นที่จำเป็นต้องมีการตั้งค่าสถานะโดยผู้ใช้ 3 คนก่อนที่ผู้ดำเนินการจะดำเนินการใด ๆ
Joel Murphy

2
ธงที่ฉันยกขึ้นถือว่าเป็นประโยชน์ดังนั้นไม่แน่ใจว่าจะใช้เวลานานเท่าใด!
cheesemacfly

คำตอบ:


11

ส่วนใหญ่มีแนวโน้มการประยุกต์ใช้โหนดของคุณมีผลผูกพันไปยังที่อยู่ย้อนกลับ IP 127.0.0.1แทน "ทุก IP ที่" ตั้งแต่นี้เป็นพฤติกรรมที่เริ่มต้นของ0.0.0.0 listenระบุทั้งพอร์ตและ IP ในการโทรของคุณเช่นserver.listen(80, '0.0.0.0');และลองอีกครั้ง


3
ถ้าฉันทำสิ่งนี้ฉันยังคงไม่สามารถเข้าถึงโหนดบนอุปกรณ์อื่น ๆ บน LAN ของฉัน รหัสของฉันมีลักษณะดังนี้: var io = require ('socket.io'); var express = require ("express"); แอป var = express (); var server = ต้องการ ('http'). createServer (แอป) io = io.listen ('80 ',' 0.0.0.0 ');
Joel Murphy

2
มันใช้งานได้ในกรณีของฉัน ในบางเครือข่ายไร้สายlocalhostทำงานเป็นสตริง แต่ในเครือข่ายอื่นคุณต้องพิมพ์เป็น127.0.0.1
Raul Rene

สิ่งนี้ไม่ถูกต้องในแง่ของคำถามตามที่เขียนไว้ในปัจจุบันเนื่องจากในความเป็นจริงสามารถเข้าถึงได้ในคอมพิวเตอร์ในพื้นที่โดยใช้ที่อยู่ LAN ซึ่งหมายความว่ากำลังฟังที่อยู่นั้นด้วย
Arlen Beiler

6

รับ IP เครือข่ายท้องถิ่นปัจจุบันของคุณแล้วเรียกใช้เซิร์ฟเวอร์ http ดังนี้:

server.listen(80, 'current_local_ip');

1
มันใช้งานได้สำหรับฉัน
psulek

เอกสาร NodeJS ระบุว่าหากไม่มีการระบุ IP มันจะฟังในไวลด์การ์ด (ตามลำดับ: ::หรือ0.0.0.0)
Arlen Beiler

3

ก่อนอื่นคุณต้องเพิ่มC:\Program Files (x86)\nodeรายการแอปพลิเคชั่นที่เชื่อถือได้ในไฟร์วอลล์ของคุณ

จากนั้นในแอปโหนดของคุณคุณสามารถเขียน:

listen(3333, '172.24.14.26', function() {

หรือ:

listen(3333, '0.0.0.0', function() {

หรือ:

listen(3333, function() {

หรือ:

listen(80, '172.24.14.26', function() {

หรือ:

listen(80, '0.0.0.0', function() {

หรือ:

listen(80, function() {

ชุดค่าผสมเหล่านี้แต่ละชุดทำงานในกรณีของฉัน: node.js บน Windows Server 2016 ซึ่งได้รับการป้องกันโดยพร็อกซี บริษัท


3

การทำสิ่งต่อไปนี้ได้ผลสำหรับฉันบนพีซี Windows ลองสิ่งนี้: เปิด

แอปแผงควบคุม \ System และ Security \ Windows Defender Firewall \ Allow

ค้นหา node.js ถัดไปในรายการและคลิกเปลี่ยนการตั้งค่า> ตรวจสอบให้แน่ใจว่าได้ตรวจสอบการเข้าถึงส่วนตัวแล้วคลิกตกลง


3

ฉันพบทางออกที่ดีสำหรับปัญหานี้ แทนที่จะทำการกำหนดค่าทั้งหมด (การตั้งค่าไฟร์วอลล์, การส่งต่อพอร์ต ฯลฯ ) ฉันใช้localtunnelซึ่งเป็นยูทิลิตี้สำหรับการเปิดเผยโหนดเซิร์ฟเวอร์ในระบบผ่านอินเทอร์เน็ต คุณสามารถใช้มันเพื่อการพัฒนาการทดสอบการแบ่งปันจุดประสงค์เพียงอย่าใช้มันเพื่อการผลิต

ก่อนอื่นคุณต้องติดตั้ง localtunnel ดังนี้:

$npm install -g localtunnel

หลังจากนั้นกำหนดค่าแอปโหนดของคุณเพื่อให้เซิร์ฟเวอร์โหนดของคุณควรทำงานบน localhost ตัวอย่างเช่น:

server.listen(3000, function () {
console.log('Listening to port:  ' + port);
});

จดบันทึกyour_portซึ่งในกรณีของฉันคือ3000และเริ่มเซิร์ฟเวอร์โหนดของคุณ

เปิดเทอร์มินัลอื่นแล้วพิมพ์คำสั่งต่อไปนี้เพื่อเรียกใช้ Localtunnel

$lt --port 3000

หลังจากนี้ในเทอร์มินัลคุณจะได้รับ URL ซึ่งคุณสามารถใช้เพื่อการพัฒนา / ทดสอบ URL นี้จะพร้อมใช้งานบนอินเทอร์เน็ตเพื่อให้คุณสามารถแชร์กับผู้อื่นได้ ตราบใดที่อุโมงค์โลคอลของคุณกำลังทำงานผู้อื่นสามารถเข้าถึงเซิร์ฟเวอร์โหนดโลคัลของคุณ

สำหรับตัวเลือกการกำหนดค่าเพิ่มเติม / ช่วยให้คุณสามารถอ่านเอกสารประกอบได้ที่: https://www.npmjs.com/package/localtunnel

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