Rails: 获取客户端 IP 地址

以下是我发现的两种方法:

request.remote_ip
request.env['HTTP_X_REAL_IP']

我只需要使用简单的 request.remote_ip就可以了。你为什么需要另一种方法呢?

本地 Rails 开发环境中的 eal IP 地址

参见: < a href = “ https://stackoverflow. com/questions/3887943/IP-address-in-ails”> 在本地 Rails 开发环境中获取真正的 IP 地址 对于其他一些事情,你可以做客户端服务器 ip 的。

117295 次浏览

使用以下命令获取客户端 ip:

request.remote_ip
Ames.

request.remote_ip是对所有可用 IP 地址信息的解释,它将做出最佳猜测。如果您直接访问这些变量,您将承担按照正确的优先顺序测试它们的责任。代理引入了许多头,它们创建具有不同名称的环境变量。

使用以下命令获取客户端 ip:

request.remote_ip

对于任何感兴趣并使用较新的 Rails 和 Devise gem 的用户,Devise 的“ trackable”选项在 users 表中包含当前/last _ sign _ in _ ip 列。

控制器内部:

before_action :verify_source_ip, only: [:index]


def verify_source_ip
head(403) unless request.remote_ip == '73.1.193.230'
end
因此,为了向服务器提供更有用的客户端 IP 地址,需要使用 X- 转发-使用请求标头。

是的,这是有效的。

Remote _ ip 实际上会检查传入的一些头文件。这包括 REMOTE_ADDRX-Forwarded-ForX-Forwarded-For用于代理。但首先检查 REMOTE_ADDR。您可以在 rspec 测试中验证这一点:

describe CustomersController, type: :controller do
describe "GET search" do
it "returns a 200" do
whitelisted_ip = '73.1.193.230' # a comcast ip address
request.headers['REMOTE_ADDR'] = whitelisted_ip
request.headers['X-Forwarded-For'] = whitelisted_ip
get :index
expect(response).to have_http_status(:ok)
end
end
end

控制器内部:

before_action :verify_source_ip, only: [:index]


def verify_source_ip
head(403) unless request.remote_ip == '73.1.193.230'
end