Rails redirect_to在Nginx / Unicorn上通过SSL中断

时间:2016-10-13 00:12:39

标签: ruby-on-rails redirect ssl nginx unicorn

我有一个简单的Rails控制器,它将URL作为查询参数,并通过重定向到该URL进行响应。

def redirectme
  if params[:url]
    redirect_to params[:url]
  else
    render json: nil, status: 404
  end
end

当我将此代码部署到我的生产堆栈(Nginx / Unicorn)时,控制器在http上调用时按预期工作 - 即它执行重定向并获得params[:url]的响应页。但是当在https上调用时,我得到了可怕的回复:<html><body>You are being <a href="[URL]">redirected</a>.</body></html>

我已经研究过这个问题,大多数人似乎已经通过设置X-Forwarded-Proto标题修复了它。我的conf文件中已经有了这个设置,所以我不确定出了什么问题。我的应用程序的其余部分工作正常。

以下是我的两个服务器块的子集:

server {
  listen 80;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
  }
}

server {
  listen   443;

  location @unicorn {
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-CLIENT-VERIFY $ssl_client_verify;
    proxy_redirect off;
  }
}

关于什么可能导致Rails提供“你被重定向”页面而不是实际执行重定向的任何想法?

0 个答案:

没有答案