2015-02-25 19 views
6

Recentemente ho avuto un problema con le mie istanze AWS EC2. Il problema è che non posso colpire i miei server Rails tramite IP pubblico, ma posso colpire localhost e il server risponderà.Impossibile connettersi al server Rails in esecuzione su EC2 da IP pubblico

Ecco quello che sto facendo:

  • Creare nuova istanza EC2 (t2.micro, tier ubuntu libero)
  • gruppo Sicurezza ha la porta 22, 80, 3000 aperto a tutti (0.0.0.0)
  • SSH per istanza EC2, install rails (ho usato this installare)
  • Inizio guide del server dopo l'installazione, è in esecuzione sulla porta 3000
  • run "wget ​​localhost: 3000" e ritorna index.html , Sìì!
  • passare al browser Web, digitare EC2 istanza IP pubblico e porta 3000 (IP: 3000), dice che non può connettersi :(
  • server kill kill, riavviarlo sulla porta 80, wget funziona ma puo ' t collegare tramite IP pubblico
  • come un controllo di integrità, installo nginx e corro, e posso vedere la pagina iniziale nginx sulla porta 80 tramite IP pubblico ... così confusa ...

così Penso che abbia qualcosa a che fare con il modo in cui sto installando Rails, ma ho provato metodi diversi dall'usare quello script di installazione ma sto incontrando lo stesso problema ... Ho anche provato a creare un ente fare affidamento su un nuovo account AWS nel caso avessi rovinato le impostazioni nel mio account originale, ma non ho avuto fortuna. Sono stato in precedenza in grado di far funzionare correttamente le guide su istanze EC2 (in effetti ho istanze EC2 che utilizzano lo stesso gruppo di sicurezza in esecuzione sul mio account AWS in questo momento e può colpire quegli IP pubblici bene), ma ora sto sbattendo la testa contro il muro ... qualsiasi aiuto sarebbe molto apprezzato!

EDIT: Per ora, ho configurato nginx per colpire il mio server di rotaie ... almeno questo funziona per ora ... anche se sono ancora curioso di sapere perché non riesco a colpire il mio server direttamente ..

+0

È probabile che anche necessario aprire il firewall di Ubuntu per consentire la porta 80 e/o 3000. http://serverfault.com/ domande/574491/opening-port-80-on-ubuntu-aws – infused

+0

Ho eseguito 'ufw status' e dice che è inattivo. L'output di 'iptables -L' è il seguente: ' root @ ip-172-31-3-171:/home/ubuntu/blah # iptables -L INPUT catena (politica ACCETTA) destinazione target destinazione opt opt ​​ ACCEPT tcp - ovunque ovunque tcp dpt: http! – spacemonkeys

risposta

11

Controllare se le rotaie sono in ascolto su 0.0.0.0 o 127.0.0.1, l'impostazione predefinita è ascoltare solo su localhost.

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

Dal Ruby on Rails 4.2 Release Notes:

A causa di un cambiamento nel rack, guide del server ora ascolta su localhost anziché 0.0.0.0 per impostazione predefinita. Ciò dovrebbe avere un impatto minimo sul flusso di lavoro di sviluppo standard poiché sia ​​http://127.0.0.1:3000 che http://localhost:3000 continueranno a funzionare come prima sul proprio computer.

+3

L'esecuzione del server di bundle exec bails -b 0.0.0.0' ha risolto il mio problema! Ora posso colpire il server senza problemi con nginx ... La modifica dell'associazione predefinita si è verificata in una versione recente di Rail? Una settimana fa non avevo questo problema ... – spacemonkeys

+0

È cambiato qualche tempo fa? Non ricordo che ho dovuto impostare questa opzione prima. –

1

Se si utilizza 'rotaie server' e si desidera utilizzare la porta di default 3000 quindi utilizzare di seguito:

sudo rails server -b 0.0.0.0 

si può accedere come http://[public_ip]:3000.

Se si desidera utilizzarlo come un URL senza la porta di utilizzare il seguente per eseguire il server:

sudo rails server -p 80 -b 0.0.0.0 

Basta accedere come http://[public_ip].

0

Ero in esecuzione il server di rotaie sulla porta predefinita 3000 sulla mia istanza di AWS di Ubuntu e aveva permesso questa porta nel gruppo di sicurezza, sezione in entrata, ma ancora non ero in grado di accedere alla mia applicazione utilizzando questo.
http://public_ip:3000

Ho cercato molto e questo answer mi ha aiutato. Spiegando la risposta. Dobbiamo rendere flessibile l'impostazione del firewall in modo che il nostro firewall consenta la porta 3000.

È possibile utilizzare questo comando per verificare se questa porta è consentita sul firewall o meno.

$ sudo iptables -L | grep :3000 

Se si vede nulla che significa che dobbiamo permettergli di utilizzare questo comando.

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

questo ha funzionato per me di mettere le rotaie accesso app sulla porta 3000.

Problemi correlati