187

In Rails, what's the best way to get the ip address of the client connecting to the server?

Here are two ways I've found:

request.remote_ip
request.env['HTTP_X_REAL_IP']
bryanbraun
  • 2,775
  • 1
  • 24
  • 36
ma11hew28
  • 113,928
  • 113
  • 437
  • 631

5 Answers5

342

I would just use the request.remote_ip that's simple and it works. Any reason you need another method?

See: Get real IP address in local Rails development environment for some other things you can do with client server ip's.

Community
  • 1
  • 1
loosecannon
  • 7,643
  • 3
  • 30
  • 43
50

request.remote_ip is an interpretation of all the available IP address information and it will make a best-guess. If you access the variables directly you assume responsibility for testing them in the correct precedence order. Proxies introduce a number of headers that create environment variables with different names.

tadman
  • 200,744
  • 21
  • 223
  • 248
9

Get client ip using command:

request.remote_ip
puneet18
  • 4,753
  • 2
  • 21
  • 28
3

I found request.env['HTTP_X_FORWARDED_FOR'] very useful too in cases when request.remote_ip returns 127.0.0.1

alikk
  • 403
  • 5
  • 11
1

For anyone interested and using a newer rails and the Devise gem: Devise's "trackable" option includes a column for current/last_sign_in_ip in the users table.

NorseGaud
  • 194
  • 8