预测问题:我是否需要在 Heroku 上获得 SSL 支持才能使用 SSL 在 Heroku 和 Atlas MongoDB Cloud 之间建立连接? (访问 Atlas MongoDB Cloud 服务 需要 TSL/SSL 连接)。
我正在尝试将我用 node.js 编写的 Heroku 应用程序连接到托管在 Atlas MongoDB Cloud 上的集群。
我当前的数据库托管在 mLab(作为 Heroku 插件),用于通过 mongoose 访问集群的 MongoDB URI 是(使用 xxx 省略机密信息):
MONGODB_URI="mongodb://xxx:xxx@xxx-a0.mlab.com:23266,xxx-a1.mlab.com:xxx/xxx?replicaSet=rs-xxx"
现在我已将数据从 mLab 迁移到 Atlas MongoDB Cloud,我目前正在使用 URI 访问集群:
MONGODB_URI="mongodb://xxx:xxx@cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx/xxx?replicaSet=xxx&ssl=true&authSource=admin"
在我的机器上本地运行我的 Heroku 应用程序时,我可以毫无问题地访问数据库。我还可以使用 mongo shell 连接到集群。
但是,在 Heroku 中运行应用程序时,无法建立连接。在浏览器 JS 控制台中,我收到 503 服务不可用消息。在heroku中,我得到了错误:
no primary found in replica set
我知道 Atlas MongoDB Cloud 需要 SSL 连接,这与 mLab 不同。在我的本地机器中,我想使用自签名证书成功连接到集群。
我的问题是:我是否需要在 Heroku 中获得 SSL 支持才能访问在 Heroku 和 MongoDB Atlas 之间建立安全连接?或者 Heroku 中的 SSL 支持只需要客户端/Heroku 安全连接?
原文由 amaralbf 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为可能会解决您的问题
免责声明: 我既没有使用 Heroku 也没有使用 MongoDB Atlas,但我正在研究它们。
根据 我发现的 Github 问题,如果您没有将 MongoDB Atlas 中的服务器 IP 地址列入白名单,您将收到该错误消息。
阅读 MongoDB Atlas 文档,我看到与 Heroku dynos 结合使用的唯一方法是将
0.0.0.0/0
(即所有地址)添加到您的 MongoDB Atlas 白名单中。试一试,请报告您是否可以实例化连接。
在 SSL 上
尝试回答 SSL 问题时,我认为您不需要根据我阅读的内容在 Heroku 上启用它,尽管我并不完全确定。
如果 MongoDB 服务器执行证书验证,则用于连接到它的 Node.js 代码必须如下所示(取自 Node.js 驱动程序文档):
如果 MongoDB 服务器不检查任何 SSL 证书,您可以简单地使用如下代码(也取自 Node.js 驱动程序文档):
鉴于 Atlas 文档 包含以下用于从 Node.js 连接到它的示例代码,我认为您 不必 在 Heroku 上启用 SSL: