1

我正在尝试设置一个 Amazon EB 实例来使用 DocumentDB。当我尝试连接亚马逊 linux 终端时,连接工作正常。但是当我尝试连接 PHP 时,它会返回如下所示的错误

“找不到合适的服务器(serverSelectionTryOnceset):[套接字超时调用'docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017'上的ismaster]”

我使用终端进行了故障排除并获得了“成功!” 这表明再次连接成功。

nc -zv docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com 27017

任何人都知道有什么问题吗?

这是我连接到 DocumentDB 的代码

$conn = new MongoClient("mongodb://username:password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017/?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0");

4

5 回答 5

0

如果您在防火墙后面并维护网络端口的白名单,那么您应该必须打开端口 27017 才能连接到 MongoDB 集群。

于 2019-06-21T12:25:57.713 回答
0

您可能想尝试使用集群指定数据库名称。类似于:mongodb://username:password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017/ proddb ?ssl_ca_certs=rds -combined-ca-bundle.pem&replicaSet=rs0

于 2019-03-01T19:21:32.997 回答
0

为了让您的 PHP 服务器访问 DocumentDB,您的集群必须在同一个 VPC 中。如果您的服务器尝试从其他位置连接,您的身份验证可能会失败。

https://docs.aws.amazon.com/documentdb/latest/developerguide/troubleshooting.html#troubleshooting.cannot-connect.public-endpoints

此外,AWS 不支持最新的 MongoDB 驱动程序,因为它们不支持最新的 MongoDB API。

您可以通过使用 MongoDB Atlas 来避免这两个限制。您可以在几分钟内在 AWS 中部署 MongoDB 集群,并且不会面临同样的限制。

https://cloud.mongodb.com/

于 2019-02-22T23:35:06.973 回答
0

请看下面的例子。

此外,在您的连接字符串中,您似乎有一个额外的“docdb-”,即“docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster...”

<?php
require 'vendor/autoload.php'; // include Composer's autoloader

$SSL_DIR = "/home/ubuntu";
$SSL_FILE = "rds-combined-ca-bundle.pem";

$ctx = stream_context_create(array(
    "ssl" => array( 
        "cafile" => $SSL_DIR . "/" . $SSL_FILE,
    ))
);

$client = new MongoDB\Client("mongodb://<yourUserName>:<yourPassword>@docdb-2019-01-29-02-53-18.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017", array("ssl" => true), array("context" => $ctx));

$col = $client->test->col;

$result = $col->insertOne( [ 'hello' => 'Amazon DocumentDB'] );

$result = $col->findOne(array('hello' => 'Amazon DocumentDB'));

print_r($result);

?>
于 2019-03-20T13:45:32.550 回答
0

尝试将“ssl=true&”添加到您的连接字符串。请看下面:

$conn = new MongoClient("mongodb://username:password@docdb-docdb-XXXX-XX-XX-XX-XX-XX.cluster-cXXXXXXXXXX.eu-west-1.docdb.amazonaws.com:27017/? ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0");

于 2019-02-24T15:26:54.037 回答