2011-05-26 11 views
7

Mi servidor no tiene una dirección IP pública, por lo que no sé cómo obtener la dirección IP del cliente real.¿Obtiene la dirección IP real del cliente con Rails y Nginx?

Esta es la configuración de mi nginx:

location/{ 
    proxy_pass http://domain1; 
    proxy_set_header  Host   $host; 
    proxy_set_header  X-Real-IP  $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

En controlador de mi Rails aplicación tanto request.ip y request.remote_ip devolver dirección de la entrada de mi servidor.

¿Cómo puedo obtener la IP real del cliente?

¿Cómo obtener X-Forwarded-For value from Rails request?

Respuesta

6

debería darse el valor de la cabecera X-reenviado por

http://en.wikipedia.org/wiki/X-Forwarded-For

+0

puede que no sea la ip "real" del cliente si está sentado detrás de Proxy :) y usted sabe :) –

+0

@Rizwan S Harif entonces simplemente consideramos que el proxy es el cliente. ^^ –

+1

pero el IP en el registro de mis rieles también es la dirección de gate_way. – ethan

18

rieles se supone que deben hacer de forma automática para nosotros, pero parece no estar funcionando con 3.x actual

estoy usando esto:

def ip() request.env['HTTP_X_FORWARDED_FOR'] || request.remote_ip end 
+0

¿Cómo detecto la solicitud de localhost? Antes de nginx solía obtener 127.0.0.1, pero ahora obtengo la dirección IP privada en su lugar ... – Adrian

+0

Un recordatorio de que el encabezado no es necesariamente una IP, sino más específicamente una lista de IP separadas por comas, la más a la izquierda es la original cliente. Si solo hay una IP, el código anterior funcionará, pero sospecho que no, si hubo más de uno. Ver http://en.wikipedia.org/wiki/X-Forwarded-For. –

Cuestiones relacionadas