Ruby on rails 如何将$remote\u addr与rails和nginx secure\u链接一起使用

Ruby on rails 如何将$remote\u addr与rails和nginx secure\u链接一起使用,ruby-on-rails,nginx,Ruby On Rails,Nginx,我有一个rails应用程序,它通过net::http调用另一台服务器来检索文档 我已经用安全链接设置了Nginx nginx配置已经完成 secure_link $arg_md5,$arg_expires; secure_link_md5 "$secure_link_expires$uri$remote_addr mySecretCode"; 在客户端(实际上是我的rails服务器),我必须创建安全url,类似于: time = (Time.now + 5.minute).to_i hmac

我有一个rails应用程序,它通过net::http调用另一台服务器来检索文档

我已经用安全链接设置了Nginx

nginx配置已经完成

secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr mySecretCode";
在客户端(实际上是我的rails服务器),我必须创建安全url,类似于:

time = (Time.now + 5.minute).to_i
hmac = Digest::MD5.base64digest("#{time}/#{file_path}#{IP_ADDRESS} mySecretCode").tr("+/","-_").gsub("==",'')
return "#{DOCUMENT_BASE_URL}/#{file_path}?md5=#{hmac}&expires=#{time}"

我想知道的是获取上述IP_地址值的最佳方法,关于如何获取IP地址有多种答案,但其中许多答案似乎不如向返回请求IP地址的web服务发出请求那样可靠,因为这是nginx安全链接将看到的,我们不需要某种类型的本地主机地址

我将以下方法放在我的暂存服务器上:

  def get_client_ip
    data=Hash.new
    begin
      data[:ip_address]=request.ip
      data[:error]=nil
    rescue Exception =>ex
      data[:error]=ex.message
    end
    render :json=>data
  end
response = Net::HTTP.get_response(URI("myserver.com/web_service/get_client_ip"))
if response.class==Net::HTTPOK
  response_hash=JSON.parse response.body
  ip=response_hash["ip_address"] unless response_hash[:error]
else
  #deal with error
end
然后,我从请求服务器调用了该方法:

  def get_client_ip
    data=Hash.new
    begin
      data[:ip_address]=request.ip
      data[:error]=nil
    rescue Exception =>ex
      data[:error]=ex.message
    end
    render :json=>data
  end
response = Net::HTTP.get_response(URI("myserver.com/web_service/get_client_ip"))
if response.class==Net::HTTPOK
  response_hash=JSON.parse response.body
  ip=response_hash["ip_address"] unless response_hash[:error]
else
  #deal with error
end
成功获取ip地址后,我只是缓存它,没有继续调用web服务方法