Cloudflare 上的 Heroku 自定义域:重定向过多
Posted
技术标签:
【中文标题】Cloudflare 上的 Heroku 自定义域:重定向过多【英文标题】:Heroku custom domains on Cloudflare: Too many redirects 【发布时间】:2015-10-21 16:35:53 【问题描述】:目标
通过 Cloudflare 运行 https://rapid.essbap.org。 这应该映射到https://ebcc-rrn.herokuapp.com(Rails 应用程序) 但是,我收到“重定向过多”页面,例如 之前已在其他 Heroku 应用上成功完成此操作,使用以下步骤 我错过了什么?我做了什么
通过 Godaddy 购买essbap.org
。
已将 DNS 导入 Cloudflare。
在 Godaddy 插入 Cloudflare 名称服务器。
从 Godaddy 中删除了区域记录。
Cloudflare:
插入 CNAME 记录rapid
以指向 ebcc-rrn.herokuapp.com
在 Heroku 上:将自定义域 rapid.essbap.org
添加到 ebcc-rrn.herokuapp.com
Heroku:
heroku domains:add rapid.essbap.org
=== ebcc-rrn Heroku Domain
ebcc-rrn.herokuapp.com
=== ebcc-rrn Custom Domains
Domain Name DNS Target
---------------- ----------------------
rapid.essbap.org ebcc-rrn.herokuapp.com
$ host rapid.essbap.org
rapid.essbap.org has address 104.27.162.137
rapid.essbap.org has address 104.27.163.137
Cloudflare 设置
刚刚添加:
跑步卷曲
当我对另一个我知道有效的 Heroku 自定义域应用程序运行 curl
时,它看起来像:
$ curl -I some.custom_app.com
HTTP/1.1 301 Moved Permanently
Location: https://some.custom_app.com/
# since I'm using force_ssl on Rails, we expect to be directed to https://
$ curl -I https://some.custom_app.com/
HTTP/1.1 200 OK
ebcc-rrn.herokuapp.com
的类似行为(我们希望 rapid.essbap.org
成为其别名的 Herokuapp)。一个 301 然后 200。
但是当我对rapid.essbap.org
运行curl
时,我得到:
$ curl -I rapid.essbap.org
HTTP/1.1 301 Moved Permanently
Location: https://rapid.essbap.org/
# since I'm using force_ssl on Rails, we expect to be directed to https://
$ curl -I https://rapid.essbap.org
HTTP/1.1 301 Moved Permanently
Location: https://rapid.essbap.org/
在第二种情况下,我们得到的是 301 而不是 200。我不确定为什么会生成 301。不会在 dev 或 ebcc-rrn.herokuapp.com
中发生。
我错过了什么?
【问题讨论】:
也看到我在这里发布的这个解决方案,可以帮助:***.com/questions/43141495/… 【参考方案1】:如果我将该 URL 卷曲到 https://rapid.essbap.org/ 上,看起来您已将其重定向回 https://rapid.essbap.org/
curl -v https://rapid.essbap.org * 重建 URL 至:https://rapid.essbap.org/ * 在 DNS 缓存中未找到主机名 * 尝试 2400:cb00:2048:1::681b:a389... * 连接到 rapid.essbap.org (2400:cb00:2048:1::681b:a389) 端口 443 (#0) * 使用 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 的 TLS 1.2 连接 * 服务器证书:sni95196.cloudflaressl.com * 服务器证书:COMODO ECC 域验证安全服务器 CA 2 * 服务器证书:COMODO ECC 证书颁发机构 * 服务器证书:AddTrust External CA Root
GET / HTTP/1.1 用户代理:curl/7.37.1 主持人:rapid.essbap.org 接受:/
https://rapid.essbap.org/
http://rapid.essbap.org/ * 在 DNS 缓存中未找到主机名 * 尝试 2400:cb00:2048:1::681b:a389... * 连接到 rapid.essbap.org (::1) 端口 80 (#0)
GET / HTTP/1.1 用户代理:curl/7.37.1 主持人:rapid.essbap.org 接受:/
https://rapid.essbap.org/
【讨论】:
谢谢,重定向返回与 Heroku 自定义域应用程序的预期行为一致。我将此与工作 Heroku 自定义域应用程序进行了比较(根据我的问题的补充)。但是https://rapid.essbap.org
应该返回 200 而不是 301。试图找出为什么会这样。
如果您有权访问 Cloudflare 支持请求,则为 #508914【参考方案2】:
不幸的是,没有最终的解决方案(但非常感谢 Heroku 的技术帮助)。
设法通过回滚并重试来解决问题:
将 DNS 传输回 Godaddy 从 Cloudflare 擦除域 使用 Godaddy 确保功能 在 Cloudflare 上创建域 再次转移到 Cloudflare现在一切都按计划进行。
【讨论】:
我的 md2pdf.herokuapp.com 也有同样的问题。域来自 nic.io,DNS 由 dyn.com 在尝试切换到 cloudflare 之前提供。【参考方案3】:我最近在使用 Heroku、Cloudflare 和 SSL 的网站上遇到了同样的问题。
在我们的例子中,解决方案是我们必须在 Cloudflare 中的 Crypto > SSL 下将 SSL 选项设置为 Flexible
。我们在Full
上有它,这导致该站点尝试使用 CloudFlare 的 SSL 证书。它不适用于设置为 Off
的 SSL 选项。
【讨论】:
对我来说正好相反——我在 Heroku 网站上设置了 SSL,并且不断通过 Cloudlfare SSL 获得太多重定向,例如Off
或 Flexible
。将其设置为 Full (strict)
对我有用,因为 SSL 已经存在于服务器上。【参考方案4】:
我的情况是将 Crypto -> SSL Flexible
设置为 Full
成功了。
【讨论】:
【参考方案5】:Using Crypto -> "Always use HTTPS": ON 直接在 CloudFlare 上成功了。
SSL 不是由 rails 强制执行的,而是由这个选项强制执行的。
不确定这种方法是否有任何缺点。
【讨论】:
以上是关于Cloudflare 上的 Heroku 自定义域:重定向过多的主要内容,如果未能解决你的问题,请参考以下文章
Cloudflare 为 Cloudflare 页面去除自定义域上的标头
Heroku 上的 Django manage.py 自定义命令
使用 CloudFlare、Heroku 和 RoR 时如何设置真实 IP 地址?