我想知道是否可以配置 Nginx 以动态地向给定的微服务发送请求(不终止 SSL)?
在我的架构中,我有两个微服务。假设它们是 localhost:5000 和 localhost:5100。我想将所有以 localhost:5000 和 localhost:5100 开头的请求(发往 Nginx 代理)发送到/api
localhost:5000 和/services
localhost:5100。我已经在两个微服务上配置了 SSL,因此我不需要在 Nginx 上终止 SSL。
这可能吗?
答案1
您要求做的事情是不可能的。这不是 Nginx 的限制,而是 SSL 工作方式的结果。
如果在不终止 SSL 的情况下通过负载均衡器传递连接,则负载均衡器需要先选择后端,然后才能将 ServerHello 消息从服务器转发回客户端。然而,在早期阶段,客户端尚未发送 URI,因此无法将其用于选择后端。
您可选择的替代方案如下:
- 终止负载均衡器上的 SSL。
- 在两个不同的 IP 地址上托管服务。
- 在两个不同的端口号上托管服务。
- 在两个不同的域名上托管服务。
如果您严格要求 URL 使用特定域并且 URL 中不包含端口号,则大多数选项将被消除,终止负载均衡器上的 SSL 将是您唯一的选择。
我之所以区分使用两个不同的 IP 地址和使用两个不同的域名,是因为两个域名指向同一个 IP 地址是可能的,但前提是客户端支持 SNI。(在这种情况下,您只能让其中一个域为没有 SNI 的客户端工作)。