2011-05-26 125 views
7

我的服务器没有公共IP地址,所以我不知道如何获得真实客户端的IP地址。用Rails和Nginx获取客户端的真实IP地址?

这是我的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; 
} 

在我的Rails应用程序的控制器都request.iprequest.remote_ip回到我的服务器的网关地址。

如何获得客户端的真实IP?

如何获得X-Forwarded-For来自Rails请求的值?

回答

6

你应该得到的报头值X转发换

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

+0

它可能不是客户端的“真实”的IP,如果他坐在后面的代理:),你知道:) – 2011-05-26 14:09:39

+0

@Rizwan小号哈里夫,那么我们只需考虑代理是客户。 ^^ – 2011-05-26 14:12:18

+1

但我的rails日志中的IP也是gate_way地址。 – ethan 2011-05-26 16:02:11

18

的Rails是应该自动做对我们来说,却似乎与当前3.X被打破

我使用的是这样的:

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

如何检测本地主机的请求?在nginx之前,我曾经获得127.0.0.1,但是现在我得到的是私有IP地址... – Adrian 2014-11-04 15:18:27

+0

提醒:标题不一定是IP,但更具体地说,是用逗号分隔的IP列表,最左边是原始客户。如果只有一个IP,上面的代码就可以工作,但如果存在多个IP,我不会怀疑。请参阅http://en.wikipedia.org/wiki/X-Forwarded-For。 – 2017-08-16 16:59:50