Không thể truy cập máy chủ rails trên VM từ máy chủ


12

Tôi có một máy chủ rails trên máy ảo và tôi cần truy cập localhost từ máy chủ. Tôi đã thử cả NAT (bằng cách chuyển tiếp cổng - cổng 80 và 3000 ở phía khách) và bộ điều hợp cầu nối nhưng dường như không có gì hoạt động.

Trong cả hai trường hợp tôi đều có thể truy cập cổng 80 nhưng tôi đã không kết nối được với localhost trên cổng 3000 (vì vậy không có vấn đề gì khi truy cập máy chủ xampp).

Vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng nào về cách một người có thể truy cập localhost từ máy chủ trong khi máy chủ ở phía khách.

Tôi có linux (debian) trên máy khách và Windows 7 ở phía máy chủ - Tôi sử dụng VirtualBox.

Câu trả lời:


10

Có ít nhất ba thành phần riêng biệt đang chơi ở đây, mỗi thành phần cần được cấu hình chính xác.

Địa chỉ ràng buộc Rails

Khi Rails (hoặc một ứng dụng máy chủ khác) mở để nhận kết nối mạng, nó sẽ liên kết với cả IP và cổng. Nếu một yêu cầu đến không khớp với cả hai yêu cầu này, nó sẽ không chấp nhận kết nối. Từ rails server --help:

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

Vì vậy, theo mặc định, Rails sẽ chỉ chấp nhận các yêu cầu được gửi đến localhostbộ điều hợp mạng (loopback) của nó (được gọi lo). Vì bộ điều hợp này chỉ có thể truy cập từ trong cùng một máy tính, nên các yêu cầu duy nhất mà nó chấp nhận sẽ đến từ chính máy ảo Debian: tốt và an toàn để thử nghiệm, nhưng không hữu ích cho sản xuất hoặc thậm chí thử nghiệm từ một máy tính khác.

Nếu bạn muốn Rails có thể truy cập được từ bất kỳ máy tính nào khác (bao gồm cả máy chủ Windows 7 của bạn), bạn sẽ cần nói với Rails liên kết với bất kỳ địa chỉ IP nào Debian có thể truy cập từ bên ngoài (xem bên dưới).

Tuy nhiên, một cách dễ dàng hơn là bảo Rails liên kết với địa chỉ IP đặc biệt 0.0.0.0, có nghĩa là bất kỳ bộ điều hợp mạng nào . Vì vậy, bắt đầu máy chủ Rails của bạn như vậy:

rails server -p 80 -b 0.0.0.0

sẽ làm cho trang web của bạn có thể truy cập được đối với bất kỳ ai có thể nhìn thấy VM của bạn trên mạng.

Đây có thể là những gì vẫn làm bạn bối rối ngay cả khi bạn có hai thành phần khác hoạt động.

Địa chỉ IP VM

Bạn cần trỏ trình duyệt của mình vào máy ảo Debian, đây là máy tính riêng của nó.

Nguyên tắc chung localhostlà nó luôn đề cập đến cùng một máy tính. Tuy nhiên, với mục đích kết nối mạng, máy ảo Debian của bạn là máy tính riêng của nó. Nếu bạn đang sử dụng trình duyệt web trong máy chủ Windows 7, localhostsẽ luôn đề cập đến Windows 7 của bạn và không có gì khác.

Bạn có hai lựa chọn ở đây:

  • Đặt bộ điều hợp VirtualBox VM thành chế độ Cầu (như bạn đã đề cập trong câu hỏi của mình). Điều này sẽ đặt Debian của bạn trực tiếp trên cùng mạng bên ngoài / nhà / cơ quan với máy chủ Windows 7 của bạn. Sau đó, bạn có thể xác định IP của máy ảo Debian của mình bằng cách chạy ifconfig. Tìm IP của bạn eth0hoặc eth<something>bộ chuyển đổi. Cắm cái này vào thanh địa chỉ của trình duyệt của bạn.

  • Sử dụng bộ chuyển đổi NAT và chuyển tiếp cổng VirtualBox . IMO điều này phức tạp hơn.

Tường lửa Debian

Đã được một thời gian kể từ khi tôi làm việc trên Debian vì vậy tôi không biết mặc định hiện tại là gì, nhưng nếu hai điều trên không hoạt động thì điều này có thể đáng để xem xét. Nếu Debian đang chạy tường lửa, bạn sẽ cần mở bất kỳ cổng nào bạn muốn truy cập từ một máy khác.

Hi vọng điêu nay co ich :)

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.