在向我的网站添加SSL支持后,我获得了无限重定向循环。我正在使用“SslRequirement”插件。
我看到的症状是,任何启用了“ssl_required”的操作,以及我手动键入的前面有https的任何URL都会进入无限循环,并在development.log文件中包含以下内容:一遍又一遍,直到浏览器捕获重定向循环并停止加载页面(“/ admins / index”是此示例中的操作,但它会在任何操作时发生):
Processing AdminsController#index (for 127.0.0.1 at 2010-08-13 13:50:16) [GET]
Parameters: {"action"=>"index", "controller"=>"admins"}
Redirected to https://localhost/admins
Filter chain halted as [:ensure_proper_protocol] rendered_or_redirected.
Completed in 0ms (DB: 0) | 302 Found [http://localhost/admins]
起初我觉得有一些问题,我必须让我的所有行为“ssl_allowed” - 所以我试过了,但无济于事。
如果我删除SslRequirement的使用,并删除任何“ssl_required / ssl_allowed”引用,那么https工作正常 - 所以这是从http到https的操作中的重定向似乎是问题。
任何线索?
答案 0 :(得分:2)
在此处找到答案:
http://www.hostingrails.com/SSL-Redirecting-not-working
简短版本是,我将以下行添加到我的nginx配置中的SSL vhost:
proxy_set_header X_FORWARDED_PROTO https;
详细版本是:
基本上问题归结为nginx服务器没有将源请求作为HTTPS协议传递给Mongrel集群。这导致调用“request.ssl?”在SslRequirement插件中,总是返回false。
因此,当这返回为false时,“ensure_proper_protocol”将通过https重新发出操作,这将检查“request.ssl?”,这将返回“false”,这将通过https重新发出操作,它将检查“request.ssl?”,这将返回“false”,这将通过https重新发出操作,这将检查“request.ssl?”,这将返回“false”,这将重新发出对https的操作,会检查“request.ssl?”,这将返回“false”,这将通过https重新发布操作...
...你明白了。 mongrel集群从未认为该请求是通过HTTPS协议的,因此它永远重定向。 nginx配置中的一个小变化来纠正这个问题,BAM-O:问题解决了。