[英]Can't connect to my MongoDB EC2 instance via NodeJs
我們有一個帶有 NodeJs 8.11.3 的 EC2 MongoDb 4.0.1 實例,當我嘗試訪問我的遠程 MongoDb 時,我得到一個TimeOutError
。
var url = "mongodb://admin:pw@xxx-xx-xxx-xx-x.eu-central-1.compute.amazonaws.com:27017";
MongoClient.connect(url, (err, database) => {
if (err) return console.log(err);
db = database.db(dbName);
app.listen(3000, function() {
console.log("listen 3000");
})
});
我已經設置了admin,在mongo.conf
文件中bind_ip
字段,在安全組中設置了27017端口的入站規則。
然后我想通過"mongodb://admin:pw@127.0.0.1:27017"
進行本地連接,但出現“無法連接到服務器...”錯誤。
有什么建議以及如何解決嗎?
您尚未指定數據庫,請替換
"mongodb://admin:pw@127.0.0.1:27017"
通過
"mongodb://admin:pw@127.0.0.1:27017/myDatabaseName"
另外,如果使用用戶名和密碼,則必須具有一個身份驗證數據庫,必須在連接行中使用authSource指定該數據庫 :
我假設您的身份驗證數據庫名稱是“ admin”
"mongodb://admin:pw@127.0.0.1:27017/myDatabaseName?authSource=admin"
如果您所有的信息都是正確的,那么我必須能夠使用以下命令將Shell直接連接到您的身份驗證數據庫:
mongo admin -u admin -p pw --host 127.0.0.1 --port 27017
並通過以下方式到您的數據庫:
mongo myDatabaseName -u admin -p pw --host 127.0.0.1 --port 27017
使用用戶和密碼連接到遠程數據庫的標准過程如下:
在您的EC2服務器上:
首先,確保您的27017端口已打開。
連接你的外殼
$ mongo --port 27017
創建管理員用戶myAdmin,密碼為Test1234:
> db.createUser({user: "myAdmin", pwd: "Test1234", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})
從mongo注銷
對mongod.config文件啟用身份驗證並禁用本地綁定:
security:
authorization: enabled
# bindIp: 127.0.0.1
重新啟動mongod:
sudo service mongod restart
您必須能夠執行以下操作:
連接時進行身份驗證:
mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"
或連接然后驗證:
mongo --port 27017
> use admin
switched to db admin
> db.auth("myAdmin", "Test1234")
然后,您必須能夠創建用戶,首先以admin身份驗證:
mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"
然后為數據庫“ myDb”創建用戶myUser,其密碼為Abcd1234
db.createUser({user: "myUser", pwd: "Abcd1234", roles:[{role: "readWrite", db: "myDb"}]})
然后,您必須能夠在myDb數據庫上與您的新用戶本地連接
mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin"
然后確認沒有身份驗證就不能使用mongo:
mongo myDb --port 27017
> show collections
"ok" : 0,
"errmsg" : "not authorized on myDb to execute command { listCollections: 1.0, filter: {} }",
"code" : 13
您現在可以嘗試遠程連接:
在本地外殼上,只需將主機添加到您的連接線即可:
mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin" --host 164.X.X.X
在nodejs上,您只需要將這些參數添加到連接線即可:
"mongodb://myUser:Abcd1234@164.X.X.X:27017/myDb?authSource=admin"
當
bindIp<\/code>被注釋掉時,它默認為
localhost<\/code> ,其效果與
bindIp: 127.0.0.1<\/code>相同。
您需要綁定到非本地主機(例如可公開訪問的)IP 地址。
使用
bindIp: "*"<\/code>或
bindIpAll: true<\/code>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.