Làm thế nào để truy cập máy chủ NodeJS trên LAN?


16

Tôi không phải là người hiểu biết nhất về mạng, nhưng ở đây ...

Tôi đã tạo một ứng dụng với NodeJS và tôi muốn thử nghiệm ứng dụng trên mạng LAN của mình với gia đình. Ứng dụng này sẽ lắng nghe trên cổng 1337cho các kết nối và tôi có thể truy cập tốt ứng dụng thông qua máy tính của riêng mình bằng cách gõ localhost:1337, 192.168.0.3:1337hoặc thậm chí http://joel-pc:1337/vào thanh địa chỉ của trình duyệt của tôi.

Tôi cũng sẽ chạy apache cùng với NodeJS và tôi có thể truy cập mức phạt này bằng cách nhập 192.168.0.3hoặc http://joel-pc/vào thanh địa chỉ của trình duyệt miễn là nó được kết nối với cùng một mạng.

Bây giờ đây là phần kỳ lạ; Nếu tôi dừng dịch vụ apache, thay đổi ứng dụng nút của tôi để lắng nghe trên cổng 80(http) insted của 1337, nó sẽ có thể truy cập vào máy tính của tôi bằng cách gõ localhost, 192.168.0.3hoặc thậm chí http://joel-pcvào thanh địa chỉ của trình duyệt của tôi. Tuy nhiên, tôi vẫn không thể truy cập NodeJS trên bất kỳ PC nào khác trên mạng của tôi ngoài mạng của tôi.

Tôi đã thử tạo quy tắc ra bên ngoài trong Windows 7 để cho phép truy cập vào cổng 1337, nhưng tôi vẫn không thể truy cập vào máy chủ NodeJS của mình trên bất kỳ PC nào khác ngoài máy tính của mình, ngay cả khi nó đang nghe trên cổng 80. Có điều gì đó rõ ràng không Tôi đang bỏ lỡ ở đây?


2
Điều gì nếu, chỉ là một thử nghiệm, bạn tắt tường lửa của bạn?
cheesemacfly

1
Nếu tôi tắt tường lửa, tôi có thể truy cập nút hoàn hảo, cảm ơn bạn :) Nhưng chắc chắn phải có cách làm an toàn hơn?
Joel Murphy

1
Tôi đã đặt nó trở lại bây giờ, đừng lo lắng :) Tôi có nên đăng lên đó không? Hoặc có cách nào để chuyển câu hỏi của tôi hơn? cảm ơn bạn
Joel Murphy

2
Chúc mừng. Tôi cũng gắn cờ nó bởi vì tôi đọc trong một chủ đề khác rằng nó cần được gắn cờ bởi 3 người dùng trước khi bất kỳ hành động nào được thực hiện bởi người điều hành
Joel Murphy

2
Lá cờ tôi giơ lên ​​được coi là hữu ích, vì vậy không chắc có thể mất bao lâu!
cheesemacfly

Câu trả lời:


11

Nhiều khả năng ứng dụng nút của bạn đang liên kết với địa chỉ IP loopback 127.0.0.1thay vì "tất cả IP" 0.0.0.0vì đây là hành vi mặc định của listen. Chỉ định cả cổng và IP trong cuộc gọi của bạn như thế nào server.listen(80, '0.0.0.0');và thử lại.


3
Nếu tôi làm điều này, tôi vẫn không thể truy cập Node trên bất kỳ thiết bị nào khác trong mạng LAN của mình. Mã của tôi trông giống như thế này: var io = quiries ('socket.io'); var express = Yêu cầu ("thể hiện"); ứng dụng var = express (); var server = Yêu cầu ('http'). createdServer (ứng dụng) io = io.listen ('80 ',' 0.0.0.0 ');
Joel Murphy

2
Điều này làm việc trong trường hợp của tôi. Trên một số mạng không dây localhosthoạt động như một chuỗi, nhưng trong các mạng khác, bạn phải nhập chuỗi đó là127.0.0.1
Raul Rene

Điều này không chính xác trong câu hỏi như được viết hiện tại, vì thực tế nó có thể được truy cập trên máy tính cục bộ bằng địa chỉ LAN, có nghĩa là nó cũng đang nghe trên địa chỉ đó.
Arlen Beiler

6

Nhận cho bạn IP mạng cục bộ hiện tại và chạy máy chủ http như thế này:

server.listen(80, 'current_local_ip');

1
cái này hiệu quả với tôi
psulek

Tài liệu NodeJS tuyên bố rằng nếu không có IP được chỉ định, nó sẽ lắng nghe ký tự đại diện (theo thứ tự: ::hoặc 0.0.0.0)
Arlen Beiler

3

Trước tiên, bạn cần thêm C:\Program Files (x86)\nodevào danh sách các ứng dụng đáng tin cậy trong tường lửa của bạn.

Sau đó, trong ứng dụng nút của bạn, bạn có thể viết:

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

hoặc là:

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

hoặc là:

listen(3333, function() {

hoặc là:

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

hoặc là:

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

hoặc là:

listen(80, function() {

Mỗi một trong số 6 kết hợp này hoạt động trong trường hợp của tôi: node.js trên Windows Server 2016, được bảo vệ bởi proxy công ty.


3

Làm theo sau làm việc cho tôi trên PC Windows. Hãy thử điều này: mở

Bảng điều khiển \ Hệ thống và Bảo mật \ Tường lửa Windows Defender \ Các ứng dụng được phép

Tiếp theo hãy tìm node.js trong danh sách và nhấp vào thay đổi cài đặt> Đảm bảo kiểm tra quyền truy cập riêng tư và sau đó nhấp vào ok.


3

Tôi tìm thấy một giải pháp tốt cho vấn đề này. Thay vì thực hiện tất cả các cấu hình (Cài đặt tường lửa, cổng chuyển tiếp, v.v.) Tôi đã sử dụng localtunnel , một tiện ích để hiển thị máy chủ nút cục bộ qua Internet. Bạn có thể sử dụng nó để phát triển, thử nghiệm, chia sẻ mục đích, chỉ không sử dụng nó cho sản xuất.

Trước tiên, bạn phải cài đặt localtunnel như sau:

$npm install -g localtunnel

Sau đó, cấu hình ứng dụng nút của bạn sao cho máy chủ nút của bạn sẽ chạy trên localhost. Ví dụ:

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

Lưu ý your_port mà trong trường hợp của tôi là 3000 và khởi động máy chủ nút của bạn.

Mở một thiết bị đầu cuối khác và gõ lệnh sau để chạy localtunnel.

$lt --port 3000

Sau này, trong thiết bị đầu cuối, bạn sẽ nhận được một URL mà bạn có thể sử dụng nó cho mục đích phát triển / thử nghiệm. URL này sẽ có sẵn trên Internet để bạn cũng có thể chia sẻ nó với những người khác. Miễn là localtunnel của bạn đang chạy, những người khác có thể truy cập máy chủ nút cục bộ của bạn.

Để biết thêm tùy chọn cấu hình / trợ giúp, bạn có thể xem qua tài liệu: https://www.npmjs.com/package/localtunnel

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.