基于uripath的Nginx SSL传递

我想知道是否有可能configurationNginxdynamic发送请求(无SSL终止)到给定的微服务?

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

这可能吗?

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

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

你有的select如下:

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

如果您对url中的URL使用特定的域名并且没有端口号有严格的要求,那么大多数这些选项将被取消,并且在负载平衡器上终止SSL将是您唯一的select。

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

不,你不是那么说你想让它工作。 但是有办法做到这一点。

Nginx可以做TCP负载均衡 ,没问题。 这允许通过连接而不终止SSL / TLS。 然而,在networking堆栈(第4层, 传输 )的这一层,没有关于URI的知识。 你不能使用URL来平衡TCP连接,你需要Nginx监听不同的端口。 这对你来说可能是一个很好的解决scheme。

如果它适合你的应用程序,更好的方法是从第4层移到第7层。Nginx可以在负载平衡器上终止SSL / TLS,然后让Nginx调用微服务。 微服务调用可以是http或https。 这里有一个指南 。