force_ssl Rails 4 上的重定向循环使用 CloudFlare SSL
force_ssl redirect loop on Rails 4 using CloudFlare SSL
在使用 force_ssl
方法(使用 CloudFlare 的一键式 SSL 功能实现的 SSL)强制执行 SSL 时,我的 Rails 4 应用程序出现了重定向循环。
当我从 "flexible" 切换到 CloudFlare 中的 "full" SSL 设置时,这种情况就停止了。
Cloudflare 正在尝试通过 HTTP 强制连接,因为您的服务器没有 HTTPS,但您的应用正在强制使用 SSL。
问题
这发生在一组特定的情况下:
- 您的 Cloudflare (CF) SSL 设置是
Flexible
并且 CF 和 Heroku 之间允许 HTTP。
- 您的服务器或 Heroku 实例的 SSL 未设置,因此它强制在 HTTP
之间建立连接
发生的事情是:
- 您通过
HTTPS
连接到域
- Cloudflare 介入处理 SSL 部分,并尝试通过纯 HTTP 从服务器获取应用程序
- 服务器发现 HTTP 连接并重定向到 HTTPS
- 转到步骤 1
这会导致无限重定向循环。
解决方案
将您的应用服务器升级到 HTTPS,这将解决重定向问题。然后,为了安全起见,将 Cloudflare 切换到 Full
.
首先: 我在我的服务器上配置了 SSL。就我而言,我使用的是 Heroku,它可以使用 Let's Encrypt 自动配置 SSL。如果不是,您会直接使用 Let's Encrypt。 Cloudflare 还提供自签名原始证书,但既然 Let's Encrypt 既简单又免费,为什么还要麻烦呢。
其次: 我通过将以下内容添加到 production.rb
,将我的应用配置为强制使用 SSL
config.force_ssl = true
第三: 因为我的服务器和 Cloudflare 之间不再需要 HTTP 连接,所以我将其从 Flexible
切换到 Full
。如果您已使用 Let's Encrypt 或 CA 提供服务器证书,则可以切换到 Flexible (Strict)
.
在使用 force_ssl
方法(使用 CloudFlare 的一键式 SSL 功能实现的 SSL)强制执行 SSL 时,我的 Rails 4 应用程序出现了重定向循环。
当我从 "flexible" 切换到 CloudFlare 中的 "full" SSL 设置时,这种情况就停止了。
Cloudflare 正在尝试通过 HTTP 强制连接,因为您的服务器没有 HTTPS,但您的应用正在强制使用 SSL。
问题
这发生在一组特定的情况下:
- 您的 Cloudflare (CF) SSL 设置是
Flexible
并且 CF 和 Heroku 之间允许 HTTP。 - 您的服务器或 Heroku 实例的 SSL 未设置,因此它强制在 HTTP 之间建立连接
发生的事情是:
- 您通过
HTTPS
连接到域
- Cloudflare 介入处理 SSL 部分,并尝试通过纯 HTTP 从服务器获取应用程序
- 服务器发现 HTTP 连接并重定向到 HTTPS
- 转到步骤 1
这会导致无限重定向循环。
解决方案
将您的应用服务器升级到 HTTPS,这将解决重定向问题。然后,为了安全起见,将 Cloudflare 切换到 Full
.
首先: 我在我的服务器上配置了 SSL。就我而言,我使用的是 Heroku,它可以使用 Let's Encrypt 自动配置 SSL。如果不是,您会直接使用 Let's Encrypt。 Cloudflare 还提供自签名原始证书,但既然 Let's Encrypt 既简单又免费,为什么还要麻烦呢。
其次: 我通过将以下内容添加到 production.rb
config.force_ssl = true
第三: 因为我的服务器和 Cloudflare 之间不再需要 HTTP 连接,所以我将其从 Flexible
切换到 Full
。如果您已使用 Let's Encrypt 或 CA 提供服务器证书,则可以切换到 Flexible (Strict)
.