0

我正在开发一个应用程序(用 Go/Golang 编写并使用“官方”MongoDB 驱动程序),它必须访问 MongoDB 和 Cosmos/Azure(使用 MongoDB API)中的 MongoDB 数据库。我使用 Studio3T 来帮助完成数据库任务,我的应用程序作为命令行实用程序运行,我从 iTerm 中以 bash 的形式启动该实用程序。

我能够访问 MongoDB 数据库——其中一个在我的 Mac 上本地运行,另外两个在我们防火墙后面的公司服务器上(我的 Mac 几乎总是在公司 VPN 上运行)。Azure 中的 Cosmos 实例一直难以连接。

我从 Azure 门户获得了必要的 Cosmos 连接信息,并尝试在 Studio 3T 和我的应用程序中创建连接设置。起初,两者都不起作用,但是当我在 Studio3T 中手动设置代理设置以使用我们的常规代理服务器时,它能够很好地连接到 Cosmos 实例。另一方面,我的应用程序仍然无法连接,说服务器未知。

我已经在我的应用程序中尝试了连接字符串的多种排列 - 包括一个反映 Studio3T 生成的连接字符串的排列 - 看起来像这样:

mongodb://<user>:<pw>@<host>:<port>/admin?ssl=true&replicaSet=<repSet>&readPreference=primary&maxIdleTimeMS=120000&connectTimeoutMS=10000&authSource=admin&authMechanism=SCRAM-SHA-1

(括号中的项目设置的值与 Studio3T 中的值完全相同)

令人困惑的是,我的 Mac 全局设置为使用相同的代理服务器,其设置与我放入 Studio 3T 的设置完全相同,而我的应用程序启动的 shell/bash 环境将 http_proxy/https_proxy 变量设置为完全相同设置,它仍然不起作用。此外,我可以在我的 Mac 上访问各种基于 Internet 的外部资源,而且实际上只有 Azure 中的这个特定 Cosmos 实例无法访问(即使这样,只有我的 Go 程序无法访问它,而不是 Studio3T 实例在完全相同的机器上运行并使用完全相同的设置)。

这是一个经典的“说魔法”问题,这种事情让我希望我去烹饪学校而不是开始编写软件。

所以,我的问题是:

  1. 当 Studio 3T 看到启用使用自定义代理服务器的设置时,它会做什么?Studio 3T 中是否有某种内部逻辑允许其 MongoDB 连接使用这些设置来发现基于 Azure 的 Cosmos 实例?我注意到 Studio 3T 生成的 URI 具有以下参数:3t.proxyType=custom, 3t.proxyProtocol=htttp, 3t.proxyHost, 3t.proxyPort,我认为它们是 Studio3T 特定的,但显然必须是 Studio3T 用来发出其代理处理行为的信号

  2. 有没有什么我可以添加到我的 Go 程序中,为驱动程序连接到 Cosmos 的尝试“设置阶段”,以便它像 Studio3T 一样连接到 Cosmos 实例?

  3. 是否有任何我可以调整的环境设置(包括在网络首选项中在 MacOS 级别全局设置的任何内容)可以促进我的应用程序导航我们的代理服务器并连接到 Cosmos 的能力?

您能给我的任何见解/建议/帮助将不胜感激......

4

1 回答 1

1

代理地址如下所示

http://USER:PASSWORD@COMPANY.EXAMPLE.TLD:PORT

或类似的东西

http://aiw1dak1:powalkmd1@my.internal.company.local:8571

这是您需要在您的 mac 计算机中设置的内容,以便能够通过代理建立连接,例如

export http_proxy = http://aiw1dak1:powalkmd1@my.internal.company.local:8571

更多信息:https ://www.serverlab.ca/tutorials/osx/administration-osx/configuring-a-network-proxy-for-osx/

这应该通过代理设置每个网络请求,包括 MongoDB。

您也可以进入网络设置并配置网络的代理设置以自动发出请求,并且您可以要求您的公司给您一个WPAD 文件

于 2021-12-15T19:43:02.813 回答