我有一个简单的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提供“你被重定向”页面而不是实际执行重定向的任何想法?