目标
我想要通过 SSL 访问远程 PostgreSQL 数据库。
问题
数据库服务器没有自己的证书。
整体情况
我们有两个不同的服务器,运行同一 Web 应用程序的不同版本。
第一个(我们称之为Fizz
)具有 SSL 证书,运行 nginx 并且 webapp 可以(仅)通过 HTTPS 访问。
第二个 ( Buzz
) 没有 SSL 证书。
为了提供某种程度上的安全连接,webapp 只能通过 的Fizz
SSL 连接访问。
为了实现这一点,Fizz
的 nginx 配置为Buzz
通过其自己的 SSL 连接代理 的 webapp。
拒绝来自其他机器的 HTTP(S) 连接Buzz
。
这意味着https://fizz/A显示Fizz
web 应用程序和https://fizz/B顯示Buzz
的。
这很好用。
但现在我们需要安全访问上运行的 (postgres) 数据库Buzz
。
由于我们在公司顶层运行防火墙,因此我无法直接访问它,但它可以通过 SSH 隧道工作。
如果我想通过 SSL 访问,我必须通过 访问它Fizz
。但我不知道该怎么做。我希望我可以配置 nginx 来执行与对 webapps 执行的操作类似的操作。
这有可能吗?我不确定如何配置。我在网上找到的所有信息都涉及 http 和 webserver。
或者还有其他方法,也许 SSH/SSL 隧道并将Fizz
流量重定向到Buzz
?
我有点失落。
编辑 2016-09-22
我画了一张图片来让情况更清楚一点(希望如此):
绿色路径是正常工作的。我可以Fizz
通过 https 进行访问,并且 nginx 会建立连接来Buzz
传送 Web 应用程序。
橙色路径是我想要做的。基本上是同样的事情,但不是通过网站,而是通过数据库连接。
我不确定 nginx 是否可以实现。
编辑 2016-09-23
根据 Tims 链接我现在进行以下设置:
绕过代理的 SSH 隧道:
5443:localhost:5443
以及一条 nginx 规则:
stream {
listen 5443 ssl;
proxy_pass buzz:5432
}
想法:
- 建立与 Fizz 的 ssh 连接
- 打开隧道 5443:localhost:5443
- 让客户端连接到 localhost:5443
- 让 nginx 监听 5443 并
- 重定向至 Buzz:5432
这是数据库监听的端口。
ncat
测试与回报的 联系Close: Result too large
所以我不确定,直到连接起作用为止。