【发布时间】:2020-04-09 13:10:48
【问题描述】:
我们正在尝试使用 IIS 中的反向代理设置访问 mongo 数据库。
按照here 提供的说明在 IIS 中设置反向代理。
作为入站规则的一部分,我们以以下格式提供 Mongo DB 服务器详细信息:Mongoservername:27017。
但是我们无法使用设置反向代理的 IIS 网站连接到 mongodb。
错误详情:
NETWORK [js] recv():消息 msgLen 1347703880 无效。最小 16 最大:48000000
NETWORK [js] DBClientConnection 无法从 Servername:port 接收消息 - ProtocolError: recv(): message msgLen 13477038 80 无效。最小 16 最大:48000000
E QUERY [js] 错误:尝试在主机 'servername:port' 上运行命令 'isMaster' 时出现网络错误:connect@src/mongo/shell/mongo.js
使用的命令:
Mongo --host --port --user 用户 --password 密码(配置IIS反向代理的服务器名)
反向代理设置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="{C1}://mongoserver:27017/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
但是,当访问以下 URL 时:在浏览器上,我们收到以下消息:看起来您正试图在本机驱动程序端口上通过 HTTP 访问 MongoDB。
我们可以通过这种方式实现访问mongodb吗?
提前致谢。
【问题讨论】:
-
当客户端未通过 SSL 连接服务器时,Mongo 将报告“尝试运行命令时出现网络错误”。您的反向代理是否损坏了它?请发布您的反向代理设置。
-
@JokiesDing 我已经用反向代理设置更新了任务。
-
我认为该规则完全不正确。因为您试图在没有任何条件模式的规则中使用 {C:} 。看来规则正在破坏您的前端网关。
-
@JokiesDing {C} 应替换为 TCP,作为 mongo DB 用户 TCP 协议。并且 IIS 支持 HTTP 和 HTTPS。 forums.iis.net/t/1214886.aspx我想知道这是否是问题的根本原因。
-
{C}仅适用于 URL 重写中的条件模式,并且重写规则只能用于处理传入的 http 或 https 请求。 URL 重写不直接处理 tcp 连接。所以我认为该规则不应该适用于 mongoDB。
标签: mongodb iis reverse-proxy