基于uri路径的Nginx SSL透传

Kam*_*ski 1 ssl nginx proxy

我想知道是否可以将 Nginx 配置为向给定的微服务动态发送请求(无需 SSL 终止)?

在我的架构中,我有两个微服务。让我们假设它们是 localhost:5000 和 localhost:5100。我想发送所有/api以 localhost:5000 和/serviceslocalhost:5100开头的请求(来自 Nginx 代理)。我已经在两个微服务上配置了 SSL,所以我不需要在 Nginx 上终止 SSL。

这可能吗?

kas*_*erd 6

你要求做的事情是不可能的。这不是 Nginx 的限制,而是 SSL 工作方式的结果。

通过负载均衡器传递连接而不终止 SSL 需要负载均衡器选择一个后端,然后才能将 ServerHello 消息从服务器转发回客户端。但是在那个早期阶段,客户端还没有发送 URI,所以它不能用于后端的选择。

您拥有的替代方案如下:

  • 终止负载平衡器上的 SSL。
  • 在两个不同的 IP 地址上托管服务。
  • 在两个不同的端口号上托管服务。
  • 在两个不同的域名上托管服务。

如果您严格要求 URL 使用特定域并且 URL 中没有端口号,则大多数选项将被取消,并且在负载均衡器上终止 SSL 将是您唯一的选择。

我区分使用两个不同的IP地址和使用两个不同的域名的原因是两个域名指向同一个IP地址是可能的,但前提是客户端支持SNI。(在这种情况下,您只能使一个域为没有 SNI 的客户端工作)。