2015-02-25 21 views
6

Gần đây, tôi đã gặp sự cố với các trường hợp AWS EC2 của mình. Vấn đề là tôi không thể nhấn máy chủ Rails của tôi thông qua IP công cộng, nhưng tôi có thể nhấn localhost và máy chủ sẽ phản hồi.Không thể kết nối với máy chủ Rails chạy trên EC2 từ IP công cộng

Đây là những gì tôi đang làm:

  • Tạo dụ mới EC2 (t2.micro, tầng ubuntu miễn phí)
  • nhóm an ninh có cổng 22, 80, 3000 mở cửa cho tất cả mọi người (0.0.0.0)
  • SSH để EC2 dụ, cài đặt lan can (tôi đã sử dụng this để cài đặt)
  • Bắt đầu ray máy chủ sau khi cài đặt, nó đang chạy trên cổng 3000
  • chạy "wget ​​localhost: 3000" và nó sẽ trả về index.html , yay!
  • truy cập trình duyệt web của tôi, nhập IP công khai phiên bản EC2 và cổng 3000 (IP: 3000), cho biết không thể kết nối: (
  • server rails, khởi động lại trên cổng 80, wget hoạt động nhưng có thể ' t kết nối qua IP công cộng
  • như một kiểm tra sanity, tôi cài đặt nginx và chạy nó, và có thể xem trang nginx bắt đầu trên cổng 80 qua IP công cộng ... rất bối rối ...

vì vậy, Tôi nghĩ rằng nó có một cái gì đó để làm với cách tôi đang cài đặt Rails, nhưng tôi đã thử các phương pháp khác hơn là sử dụng kịch bản cài đặt nhưng tôi gặp phải cùng một vấn đề ... Tôi thậm chí đã cố gắng tạo ra một enti dựa vào tài khoản AWS mới chỉ trong trường hợp tôi thay đổi cài đặt trong tài khoản ban đầu của mình nhưng không có bất kỳ sự may mắn nào. Trước đây tôi đã có thể nhận được các đường ray chạy trên các cá thể EC2 tốt (thực tế tôi có các cá thể EC2 sử dụng cùng một nhóm bảo mật đang chạy trên tài khoản AWS của tôi ngay bây giờ và có thể tấn công các IP công cộng đó), nhưng bây giờ tôi chỉ đập đầu chống lại bức tường ... bất kỳ sự giúp đỡ nào sẽ được đánh giá cao!

EDIT: Hiện tại, tôi đã định cấu hình nginx để truy cập máy chủ rails của mình .... ít nhất là công việc hiện tại ... mặc dù tôi vẫn tò mò vì sao tôi không thể truy cập trực tiếp vào máy chủ rails của mình ..

+0

Bạn rất có thể cũng cần phải mở tường lửa của Ubuntu cho phép cổng 80 và/hoặc 3000. http://serverfault.com/ question/574491/opening-port-80-on-ubuntu-aws – infused

+0

Tôi chạy 'ufw status' và nó nói nó không hoạt động. Đầu ra của 'iptables -L' như sau: 'root @ ip-172-31-3-171:/home/ubuntu/blah # iptables -L Chuỗi INPUT (chính sách CHẤP NHẬN) đích nhắm mục tiêu nguồn lựa chọn prot CHẤP NHẬN tcp - ở bất cứ nơi đâu tcp dpt: http' – spacemonkeys

Trả lời

11

Kiểm tra xem đường ray có nghe trên 0.0.0.0 hoặc 127.0.0.1, mặc định là chỉ nghe trên máy chủ cục bộ.

-b, --binding=IP     Binds Rails to the specified IP. 
           Default: localhost 

Từ Ruby on Rails 4.2 Release Notes:

Do thay đổi trong Rack, đường ray máy chủ bây giờ lắng nghe trên localhost thay vì 0.0.0.0 theo mặc định. Điều này sẽ có tác động tối thiểu đến quy trình phát triển chuẩn vì cả hai http://127.0.0.1:3000http://localhost:3000 sẽ tiếp tục hoạt động như trước trên máy của riêng bạn.

+3

Chạy 'bundle exec rails server -b 0.0.0.0' thực sự đã giải quyết được vấn đề của tôi! Bây giờ tôi có thể nhấn máy chủ của tôi tốt mà không sử dụng nginx ... Thay đổi ràng buộc mặc định trong bản phát hành gần đây của Rail? Một tuần trước, tôi không có vấn đề này ... – spacemonkeys

+0

Điều này đã thay đổi một thời gian trước chưa? Tôi không nhớ rằng tôi đã phải thiết lập tùy chọn này trước đây. –

1

Nếu bạn đang sử dụng 'đường ray máy chủ' và muốn sử dụng cổng mặc định 3000 sau đó sử dụng dưới đây:

sudo rails server -b 0.0.0.0 

nó có thể được truy cập như http://[public_ip]:3000.

Nếu bạn muốn sử dụng nó như là một URL mà không có cổng sử dụng dưới đây để chạy các máy chủ:

sudo rails server -p 80 -b 0.0.0.0 

Bạn chỉ cần truy cập vào nó như http://[public_ip].

0

Tôi đã chạy máy chủ đường ray trên cổng mặc định 3000 trên phiên bản AWS Ubuntu và đã cho phép cổng này trong nhóm bảo mật, phần gửi đến nhưng vẫn không thể truy cập vào ứng dụng của mình bằng cách sử dụng.
http://public_ip:3000

Tôi đã tìm kiếm rất nhiều và điều này answer đã giúp tôi. Giải thích câu trả lời. Chúng tôi phải cài đặt tường lửa linh hoạt để tường lửa của chúng tôi cho phép cổng 3000.

Bạn có thể sử dụng lệnh này để kiểm tra xem cổng này có được phép trên tường lửa hay không.

$ sudo iptables -L | grep :3000 

Nếu bạn thấy không có nghĩa là chúng tôi phải cho phép bằng lệnh này.

$ sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT 

này làm việc cho tôi để có được đường ray của tôi truy cập ứng dụng trên cổng 3000.

Các vấn đề liên quan