回答这个问题:我是否需要在Heroku上获得SSL支持才能使用SSL在Heroku和Atlas MongoDB Cloud之间建立连接?(TSL/SSL连接是访问Atlas MongoDB Cloud服务的要求)。
我正在尝试连接我的Heroku应用程序,它是在node中编写的。js,到Atlas MongoDB云托管的集群。
我当前的数据库托管在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 service unavailable消息。在heroku中,我得到一个错误:
no primary found in replica set
我知道Atlas MongoDB云需要SSL连接,这与mLab不同。在我的本地计算机中,我假设正在使用自签名证书成功连接到集群。
我的问题是:我是否需要在Heroku中获得SSL支持才能访问Heroku和MongoDB Atlas之间建立安全连接?或者Heroku中的SSL支持只需要客户端/Heroku安全连接?
还必须将0.0.0.0/0添加到Mongo IP白名单并在Heroku上重新部署我的应用程序才能最终正常工作(在更改IP之前,抛出了CORS错误)。
您可以使用以下命令找到Heroku的所有IP范围:
HEROKU_REGION=eu; sudo apt -qqy install curl jq 2>/dev/null 1>/dev/null; heroku regions --json 2>/dev/null | jq ".[] | select(.name==\"$HEROKU_REGION\") | .provider.region" | (REGION=$(cat); curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq ".prefixes[] | select(.region==$REGION) | .ip_prefix")
免责声明:我既没有使用Heroku也没有使用MongoDB Atlas,但我正在研究它们。
根据我发现的一个Github问题,如果您没有在MongoDB Atlas中白名单服务器IP地址,您将收到该错误消息。
阅读MongoDB Atlas文档,我认为与Heroku dynos结合使用的唯一方法是将0.0.0.0/0(即所有地址)添加到MongoDB Atlas白名单中。
尝试一下,然后请报告是否可以实例化连接。
为了回答SSL问题,我认为您不需要根据我读到的内容在Heroku上启用它,尽管我不完全确定。
如果MongoDB服务器执行了证书验证,则节点。连接到它的js代码必须如下所示(摘自Node.js驱动程序文档):
var MongoClient = require('mongodb').MongoClient,
f = require('util').format,
fs = require('fs');
// Read the certificates
var ca = [fs.readFileSync(__dirname + "/ssl/ca.pem")];
var cert = fs.readFileSync(__dirname + "/ssl/client.pem");
var key = fs.readFileSync(__dirname + "/ssl/client.pem");
// Connect validating the returned certificates from the server
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", {
server: {
sslValidate:true
, sslCA:ca
, sslKey:key
, sslCert:cert
, sslPass:'10gen'
}
}, function(err, db) {
db.close();
});
如果MongoDB服务器没有检查任何SSL证书,您可以简单地使用如下代码(也取自Node.js驱动程序文档):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
鉴于Atlas留档包含以下从Node.js连接到它的示例代码,我认为您不必在Heroku上启用SSL:
var MongoClient = require('mongodb').MongoClient;
var uri = "mongodb://kay:myRealPassword@mycluster0-shard-00-00-wpeiv.mongodb.net:27017,mycluster0-shard-00-01-wpeiv.mongodb.net:27017,mycluster0-shard-00-02-wpeiv.mongodb.net:27017/admin?ssl=true&replicaSet=Mycluster0-shard-0&authSource=admin";
MongoClient.connect(uri, function(err, db) {
db.close();
});
我使用npm模块进行了测试:backend.js上的“node-dev”和文件夹根目录上的“serve”。 我有两个指南试图帮助我: 和另一个来自Scotch.io的“在Heroku上使用MongoDB和node.js应用程序” 我在文章中没有做的不应该很重要:在tilcode中,它说使用github生成一个SSH密钥...相反,我用我的mac做了一个,用一些指南做了一个终端命令。 总结一下我的步
我刚刚在Heroku中创建了一个新的公关应用程序,添加了GrapheneDB。 null Python 3.6.5 Neo4J-Driver 1.5.3
我的Spring Boot应用程序与Spring云配置服务器连接以获取外部化属性,但突然没有与配置服务器连接/对话。我做了很多改变,不确定哪一个会导致这个问题。 > 我验证了我的Spring Boot应用程序中的bootstrap.yml文件,以下配置存在,并且Spring云配置服务器正在该位置运行 spring:application:name:abc cloud:config:uri:http
问题内容: 为了解决这个问题,我是否需要在Heroku 上获得 SSL 支持才能使用SSL 在 Heroku 和 Atlas MongoDBCloud 之间建立连接?(访问Atlas MongoDB Cloud服务需要 TSL / SSL连接)。 我试图将用node.js编写的Heroku应用程序连接到Atlas MongoDB Cloud托管的集群。 我当前的数据库托管在mLab(作为Herok
问题内容: 我正在尝试在Heroku上使用Flask开发我的第一个“大型”应用程序,并尝试将此处的基本教程与以下说明结合:https : //devcenter.heroku.com/articles/python与以下说明:http:// flask.pocoo.org/docs/patterns/packages/#larger- applications。它在本地与“先行启动”一起工作,但是
如何将PHP应用程序连接到spark sql节俭服务器? 我想不出问题出在哪里。