2011-05-26 7 views
7

Sunucumun genel bir IP adresi yok, bu yüzden gerçek istemcinin IP adresini nasıl alacağımı bilmiyorum.İstemcinin gerçek IP adresini Rails ve Nginx ile alın?

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; 
} 
benim Raylar uygulamanın denetleyici hem request.ip yılında

ve benim sunucunun ağ geçidi adresi iade request.remote_ip:

Bu benim nginx yapılandırma olduğunu.

İstemcinin gerçek IP'sini nasıl alabilirim?

Rails taleplerinden X-Forwarded-For değeri nasıl alınır?

cevap

6

Sen başlığı değeri bizim için otomatik olarak yapıyor olması gerekiyordu

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

+0

o müşterinin "GERÇEK" ip olmayabilir :) ve bildiğiniz :) –

+0

@Rizwan S harif sonra biz sadece proxy'nin müşteri olduğunu düşünüyoruz. ^^ –

+1

ama raylarımdaki IP de gate_way adresidir. – ethan

18

Raylar X-için-iletilir almalısınız, ancak şimdiki 3.x ile kırık gibi görünüyor

Bunu kullanıyorum: o vekil arkasında oturan ise

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

Yerel sunucudan isteği nasıl algılayabilirim? Nginx'ten önce 127.0.0.1 alışıyordum, ama şimdi bunun yerine özel IP adresini aldım ... – Adrian

+0

Başlığın bir IP değil, daha özel olarak da virgülle ayrılmış IP'lerin bir listesi olduğunu, en soldakiin orijinal olduğunu hatırlatmak isterim. istemcisi. Tek bir IP varsa, yukarıdaki kod işe yarayacak, ancak birden fazla olup olmadığından şüpheleniyorum. Bkz. Http://en.wikipedia.org/wiki/X-Forwarded-For. –