Can't connect to Rails server running on EC2 from public IP

I recently have been having a problem with my AWS EC2 instances. The problem is that I cannot hit my Rails servers via public IP, but I can hit localhost and the server will respond.

Here's what I'm doing:

  • Create new EC2 instance (t2.micro, ubuntu free tier)
  • Security group has port 22, 80, 3000 open to everyone (0.0.0.0)
  • SSH to EC2 instance, install rails (I've been using this to install)
  • Start rails server after install, it's running on port 3000
  • run "wget localhost:3000" and it returns index.html, yay!
  • go to my web browser, type in EC2 instance public IP and port 3000 (IP:3000), says it can't connect :(
  • kill rails server, restart it on port 80, wget works but can't connect via public IP
  • as a sanity check, I install nginx and run it, and can see the nginx start page on port 80 via public IP ... so confused...
  • So I'm thinking it has something to do with how I'm installing Rails, but I've tried methods other than using that install script but am encountering the same problem... I've even tried creating an entirely new AWS account just in case I screwed up the settings in my original account but haven't had any luck. I have previously been able to get rails running on EC2 instances just fine (in fact I have EC2 instances using the same security group running on my AWS account right now and can hit those public IPs just fine), but am now just banging my head against the wall... any help would be greatly appreciated!

    EDIT: For now, I've configured nginx to hit my rails server.... at least that works for now... although I'm still curious why I can't hit my rails server directly...


    Check if rails listens on 0.0.0.0 or 127.0.0.1, default is to listen only on localhost.

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

    From the Ruby on Rails 4.2 Release Notes:

    Due to a change in Rack, rails server now listens on localhost instead of 0.0.0.0 by default. This should have minimal impact on the standard development workflow as both http://127.0.0.1:3000 and http://localhost:3000 will continue to work as before on your own machine.


    If you are using 'rails server' and want to use the default port 3000 then use below:

    sudo rails server -b 0.0.0.0
    

    it can be accessed as http://[public_ip]:3000 .

    If you want to use it as a URL without the port use the below to run the server:

    sudo rails server -p 80 -b 0.0.0.0
    

    You just access it as http://[public_ip] .


    I was running the rails server on default port 3000 on my AWS Ubuntu instance and had allowed this port in the security group, inbound section but still I was unable to access my application by using this.
    http://public_ip:3000

    I searched a lot and this answer helped me. Explaining the answer. We have to make firewall setting flexible so that our firewall allows port 3000.

    You can use this command to check if this port is allowed on firewall or not.

    $ sudo iptables -L | grep :3000
    

    If you see nothing it means we have to allow it using this command.

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

    This worked for me to get my rails app access on port 3000.

    链接地址: http://www.djcxy.com/p/32444.html

    上一篇: 无法通过公共IP访问EC2 linux实例上的站点

    下一篇: 无法连接到在公共IP上运行在EC2上的Rails服务器