nginx 如何将 https 代理到 http 网站(它是如何工作的)

nginx 如何将 https 代理到 http 网站(它是如何工作的)

我一直在学习 SSL 并且一直在使用letsencrpyt.org在我的部分网站上提供 SSL。到目前为止一切顺利,我能够获得 A 级评级SSL 实验室。现在我的域名、子域名和带有奇怪端口的 Web 仪表板列表变得相当大。我想我可以将 nginx 设置为反向代理。

我理解 http 和 https 的工作原理,但它安全吗?如果从上游服务器到 nginx 的连接不安全,那还有什么意义呢?chrome 会崩溃吗?ssl 实验室会崩溃吗?他们难道不会检测到从实际服务器到客户端的路径并非全程加密吗?如果您在 LAN 内的安全环境中使用反向代理访问私有 IP,并且只有 nginx 面向公众,我可以理解,但我计划使用 nginx 代理其他服务器,在其他具有公共 IP 的网络中,这意味着用户数据仍将以未加密的形式通过互联网传输,对吗?

我尝试寻找有关此主题的有用信息,但未能如愿。所以让我们生成一些 =)。

谢谢,Levi

答案1

如果您的代理仅配置为 HTTP,那么您将失去加密的优势。 SSL 实验室和浏览器会注意到这一点。

您可以在代理上安装与服务器上相同的证书。这将需要更多管理。如果代理在同一个 IP 地址和端口上提供多个证书,那么只有支持 SNI 的浏览器才能始终获得正确的证书。

最重要的一点是浏览器和代理之间要有 SSL。这意味着您需要在代理 (nginx) 上安装一个或多个证书。这样才能保留您在 SSL Labs 和浏览器上的评级。

在代理和服务器之间,您有几个选择。您可以使用 HTTPS 连接服务器,这需要安装额外的证书。这些证书可以是自签名的。自签名证书可以更轻松地确保流量仅来自代理或其他内部来源。

如果您使用 HTTP 从代理连接到服务器,则需要通知服务器连接已通过安全通道到达。许多 Web 容器可以配置为使用 Cookie 来确定连接是否安全到达您的网络。如果您选择此路由,请在代理(至少对于 HTTP)连接处删除 Cookie 并将其重新添加。

如果您的服务器认为连接不安全,它们将不会接受仅安全 cookie。同样,如果浏览器连接不是 HTTPS,它们将不会发送仅安全 cookie。任何登录令牌都应使用仅安全 cookie

仅在数据中心运行 HTTP 更简单,并且与内部基础设施一样安全。在数据中心工作的人员将能够相对轻松地嗅探流量。对于安全性要求较低的情况,您可以混合使用 HTTP,对于安全性要求较高的情况,您可以混合使用 HTTPS。

代理确实添加了另一个可以启动中间人攻击的位置。请保证其安全。

答案2

如果您使用 nginx 作为反向代理,Chrome、SSL-Labs 和其他客户端将不会获取有关您的后端的任何信息,也不会获取反向代理和后端之间的连接。反向代理和后端之间发生的事情对客户端来说是完全不透明的(只要您不告诉他们详细信息,即使用额外的标头)。因此,chrome 和 ssllabs 只能检查客户端和反向代理之间的连接。

如果后端和反向代理位于同一台机器上,或者后端可通过安全的本地网络访问,则使用 HTTP 连接后端可能会很有用。在这些情况下,您可能会节省 CPU 使用率。

但即使反向代理和后端之间的连接不安全,也没有人会从外部看到这一点。但作为一个负责任的服务器管理员,你必须保护这部分。

最简单的方法:只需在反向代理和后端之间使用 HTTPS:

proxy_pass https://xx.xx.xx.xx:443;

您还可以在反向代理和后端之间设置 VPN。

相关内容