簡體   English   中英

無法通過 NodeJs 連接到我的 MongoDB EC2 實例

[英]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>

有關詳細信息,請參閱配置文件選項<\/a>。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM