根域上的 Heroku SSL

2024-05-04

我正在尝试为我的 heroku 应用程序设置 SSL。我正在使用基于主机名的 SSL 插件。赫罗库文档 http://devcenter.heroku.com/articles/ssl#customdomain_ssl_wwwyourdomaincom陈述如下:

Hostname based SSL will not work with root domains as it relies on CNAME 
aliasing of your custom domain names. CNAME aliasing of root domains is 
an RFC violation. 

正如预期的那样,当我使用以下命令访问该网站时,一切正常www子域,即https://www.foo.com https://www.foo.com。当我访问时浏览器抱怨https://foo.com https://foo.com因为所提供的证书是针对 heroku.com 的。

我的结论是我必须重定向流量foo.com to www.foo.com来解决这个问题。我正在考虑以下方法:

1)基于DNS的重定向

DNS 提供商 Zerigosupports https://www.zerigo.com/blog/2009/07/dns_updates_url_redirection_and_example_code_for_the_api the redirect记录。我遇到了一个question https://stackoverflow.com/questions/5116052/how-could-i-redirect-a-root-level-domain-to-www-subdomain-with-zerigo-dns-on-hero关于SO上的类似主题。我尝试了该解决方案,它仅适用于 HTTP 重定向(Zerigo 文档证实了这一点)。

我的 Zerigo 配置:

foo.com      A             x.x.x.x
foo.com      redirect      http://www.foo.com
www.foo.com  CNAME         zzz.amazonaws.com

2) 基于机架的重定向

添加基于机架的中间件来执行重定向。这规范主机 https://github.com/tylerhunt/rack-canonical-hostgem 提供了这样的支持。

use CanonicalHost do
  case Rails.env.to_sym
    when :staging     then 'staging.foo.com'
    when :production  then 'www.foo.com'
  end
end

我想知道是否有更好的解决方案(除非切换到每月 100 美元的基于 IP 的 SSL)


哇……这花了我很长时间,而且网上的一堆信息都是错误的。即使 Heroku 的文档似乎也没有表明这是可能的。

但 Jesper J 的答案提供了正确方向的提示:它与 DNSimple 的 ALIAS 记录一起使用,我猜这是他们创建的某种新类型的 DNS 记录。我必须将我的 DNS 服务切换给他们才能获得此记录类型(之前使用 EasyDNS)。

为了澄清当我说“有效”时,我的意思是:

  • 使用您的根域在 SSL 上的整个站点
  • 没有浏览器警告
  • 使用 Heroku 的 Endpoint SSL 产品(20 美元/月)

它适用于all以下网址(将它们重定向到https://foo.com https://foo.com没有警告)

  • http://foo.com http://foo.com
  • http://www.foo.com http://www.foo.com
  • https://www.foo.com https://www.foo.com
  • https://foo.com https://foo.com

总结重要的部分。

  1. 将您的 DNS 移至 DNSimple(如果有人知道提供 ALIAS 记录的其他提供商,请将其发布在评论中,他们是我唯一能找到的提供商)
  2. 正常设置 Heroku 端点 sslhttps://devcenter.heroku.com/articles/ssl-endpoint https://devcenter.heroku.com/articles/ssl-endpoint
  3. 返回 DNSimpl 添加一个ALIAS记录指向foo.com到你的heroku ssl端点,比如waterfall-9359.herokussl.com
  4. 另外添加一条CNAME记录指向www.foo.com到你的heroku ssl端点,waterfall-9359.herokussl.com
  5. 最后在你的rails(或其他)应用程序中进行以下设置:

in production.rb set

config.force_ssl = true

in application_controller.rb add

before_filter :check_domain

def check_domain
  if Rails.env.production? and request.host.downcase != 'foo.com'
    redirect_to request.protocol + 'foo.com' + request.fullpath, :status => 301
  end
end

这似乎终于起作用了!关键部分似乎是ALIASDNS 记录。如果有人知道的话,我很想了解更多关于它是如何工作的,以及它有多可靠/成熟。不过似乎可以解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根域上的 Heroku SSL 的相关文章

随机推荐

  • 获取文件的上次访问时间

    我知道使用File对象我们可以获得最后修改时间File i e 文件 lastModified https docs oracle com javase 8 docs api java io File html lastModified 但
  • pyspark中的稀疏向量RDD

    我一直在使用 mllib 的功能通过 Python Pyspark 实现此处描述的 TF IDF 方法 https spark apache org docs 1 3 0 mllib feature extraction html http
  • 知识树中的段错误

    我正在用 c 实现一个可以从文件中读取的知识树 我的 newStr 函数出现段错误 我无法用这个问题测试我的其余代码 我对 c 没有太多经验 任何帮助将不胜感激 我的 c 文件 包括 包括 include 动物 h 包括 包括 return
  • 如何提取 MySQL 日期中的月份和年份并进行比较?

    如何从 mySQL 日期中提取月份和日期并将其与另一个日期进行比较 我找到了 this MONTH 但它只获取月份 我寻找月份和年份 在Mysql Doku中 http dev mysql com doc refman 5 5 en dat
  • MySQL SUM 具有相同的 ID

    抱歉 这个真正简单的问题 我刚刚学习 PHP 和 MySQL 我已经在谷歌上搜索了一个多星期 但没有找到任何答案 我创建了一个简单的财务脚本 表格如下 table a aid value 1 100 2 50 3 150 table b b
  • @NotNull 注释未检查 Jersey REST 资源中的空查询参数

    我正在尝试使用 javax validation validation api 进行验证 QueryParam参数 我已按照以下步骤操作 添加依赖项
  • 如何使用C#检测IIS版本?

    如何使用C 检测IIS版本 更新 我的意思是来自 winapp 实际上该场景是开发一个自定义安装程序 想要检查已安装 IIS 的版本以调用适当的 api 在这里找到了答案 链接文本 http forums iis net p 1162404
  • Android maven插件生成多个dex文件

    如何使用 android maven 插件生成多个 dex 文件而不是一个以避免 android 64k 方法问题 可以使用这个插件来做到这一点 还是我必须使用 gradle 来做到这一点 解决方案 通过这个拉取请求https github
  • 如何使用递归获取父级的所有子级,然后获取其子级

    问候 我的 JSP Web 应用程序中有父事务的比喻 我将事务 ID 存储在数据库中 要求是显示父级的所有子级 然后显示父级子级的后续子级 实际上 这个父母及其孩子的列表永远不会超过 4 或 5 层 但我需要考虑到它可以比这更多层 我尝试过
  • 解码URIComponent抛出错误“URI格式错误”

    As unescape已被弃用 我已选择decodeURIComponent 但它没有按预期工作 decodeURIComponent无法解码以下 URI 组件 Coast 20Guard 20Academy 20to 20hold 20a
  • 了解左值到右值转换的示例

    我很难理解这段代码 来自 C 14 草案标准的示例 转换拉瓦尔 调用未定义的行为g false 为什么constexpr使程序有效 另外 不访问 是什么意思 y n 在两次通话中g 我们正在返回n数据成员那么为什么最后一行说它不能访问它呢
  • 在Rails环境中执行Ruby Worker脚本

    我有以下案例 我希望能够将独立的 Ruby 脚本作为守护进程运行 我希望能够在我的 Rails 项目的上下文 环境中执行此脚本 例如 以便该脚本可以访问后端 我的 Rails 模型 有没有一种简单的方法可以实现这一点 Thanks Use
  • 如何防止 Ajax/javascript 结果在浏览器中缓存?

    如何防止浏览器缓存Ajax结果 我有事件触发的 Ajax 脚本 仅当浏览器数据被清除时才显示结果 在 IE6 和 Firefox 3 0 10 中测试 随机 URL 可以工作 但它是一种 hack HTTP 内置了应该可以工作的解决方案 尝
  • 如何调试 Jenkins 作业中无法运行程序“C:\Program Files\Git”?

    我正在使用 jenkins 构建我的 git 项目 这是我在查看日志时收到的错误 我在 jenkins 中使用 git 插件 您将如何解决该错误消息 Started by user anonymous Building in workspa
  • 使用 JWT 验证单独的 API 微服务

    我正在 NodeJS 中使用微服务开发一个应用程序 我已经构建了一个 auth api 它处理通常的注册登录等 并且它发出 JWT 如何使用它们来保护用 Express 编写的单独 API 微服务中的路由 我是否需要使用 JWT 和密钥来解
  • Spring Boot 中的 spring.jpa.open-in-view=true 属性是什么?

    I saw spring jpa open in view trueSpring Boot 文档中用于 JPA 配置的属性 Is the true如果根本没有提供此属性的默认值 这到底有什么作用 我没有找到任何好的解释 它让你使用Sessi
  • 使用 CSS 定位文本节点

    我正在研究容器对象的 CSS 我大部分时间都在工作 具体来说 我正在查看测试用例 1 2 和 3 它们都有文本节点 有没有办法像对待任何子元素一样对待文本节点 有什么方法可以调整 CSS 以使文本节点及其兄弟节点正常工作吗 除非有一个 CS
  • 类图中的组合和依赖之间的区别?

    我知道 有人就这个案例问过同样的问题 但我仍然不明白 我需要一个具体的答案 谢谢你 D 既然冈努斯没有正确解释构图的含义 我就只好这么做了 正如 Gangnus 所解释的 聚合是一种特殊形式协会具有预期含义部分 整体关系 但没有精确的语义
  • 如何应用非标准 SQL 列排序顺序?

    考虑下表Persons Key Name Type Date Pack 1 Pocoyo KIND 30 11 2011 1 2 Erik MAN 10 10 1980 1 3 Alinda VROUW 12 12 1991 1 4 Pin
  • 根域上的 Heroku SSL

    我正在尝试为我的 heroku 应用程序设置 SSL 我正在使用基于主机名的 SSL 插件 赫罗库文档 http devcenter heroku com articles ssl customdomain ssl wwwyourdomai