2013-10-11 12 views
9

ho bisogno di memorizzare l'indirizzo IP dei visitatori al nostro database e qui è il modo che sto cercando di farlo:Rails: come ottenere l'indirizzo IP dei visitatori?

@ip = request.remote_ip 
@ip = request.env['REMOTE_ADDR'] 

Ma in entrambi i casi, la variabile @ip memorizzato il valore 127.0.0.1, anche quando Distribuisco l'app nell'istanza di Amazon EC2.

Quando controllo lo http://www.whatismyip.com/, mostra il mio IP come 109.175.XXX.X.

Quindi, perché la variabile ruby ​​visualizza sempre l'indirizzo 127.0.0.1? Come ottengo il vero IP?


EDIT: Ecco l'output del seguente:

request.env['HTTP_X_FORWARDED_FOR'] => 
request.remote_ip => 127.0.0.1 
request.env['REMOTE_ADDR'] => 127.0.0.1 
request.ip => 127.0.0.1 

ho pensato che il problema è solo dalla mia parte, ma ho mandato i collegamenti per 3 dei miei amici e tutti loro vedono lo stesso IP, solo 127.0.0.1.

Sto risolvendo questo problema tutto il giorno e ancora nessun successo.

si

+0

forse l'app è dietro un [proxy inverso] (http://en.wikipedia.org/wiki/Reverse_proxy)? –

+0

come fa il "visitatore" a visitare il tuo server? Quando si utilizza l'istanza EC2 come si invia la richiesta al server? –

+0

Semplicemente, ho aperto il mio sito Web nel browser e ho ricaricato la pagina, perché volevo vedere lì l'IP modificato, ma c'è sempre lo stesso di quello su localhost - 127.0.0.1 – user984621

risposta

12

grazie quando si visita un sito locale si sta venendo da l'indirizzo IP locale, vale a dire 127.0.0.1.

Quello che stai facendo è il modo corretto per l'indirizzo IP dei visitatori, e il risultato che stai vedendo è come previsto.

si desidera utilizzare

@ip = request.remote_ip 

perché prende in considerazione la maggior parte dei casi di reverse proxy e altre situazioni che si possono verificare dove request.env['REMOTE_ADDR'] potrebbe essere nullo o l'indirizzo del proxy locale.

Se si dispone effettivamente di un proxy inverso davanti al server delle applicazioni (e probabilmente lo si fa), è necessario assicurarsi che imposti le intestazioni corrette durante l'inoltro delle richieste. Come minimo è necessario impostare X-Forwarded-For header.

+0

grazie per la risposta. Ma a dire il vero, continuo a non capire perché sto ricevendo ** 127.0.0.1 ** su Amazon EC2. L'ho provato anche con il comando 'request.remote_ip'. Perché nella modalità di produzione su EC2 è visualizzato ** 127.0.0.1 ** anziché ** 109.175.XXX.X **? – user984621

+0

Senza conoscere la configurazione, è difficile da dire. Molto probabilmente stai colpendo un server web proxy che inoltra le richieste a qualunque cosa stai servendo Rails tramite (Unicorn, Thin, Webrick). Il proxy è locale per la tua app e se non imposta le intestazioni previste, request.remote_ip non prenderà l'IP originale. –

+0

Aiuta, sto correndo su Unicorn. (Non so del proxy) – user984621

Problemi correlati