首页 > 解决方案 > Nginx 流模块传递上游服务器的 FQDN 作为 TLS 握手的默认 SNI

问题描述

使用 nginx模块,我想使用 ssl/tls 加密从 nginx 到上游的流量。这样做时,我们需要以某种方式将 SNI(服务器名称指示)传递给上游服务器。我知道proxy_ssl_name指令,但我的上游服务器块有多个服务器(以循环方式选择)配置了不同的 ssl 证书。理想情况下,我希望将上游服务器的 fqdn 作为 Tls 握手发生的默认 SNI(服务器名称指示)传递。proxy_ssl_name 的文档说 - “默认情况下,使用 proxy_pass 地址的主机部分”,在下面的示例中为“tcpupstream”。

例如,这是我的流配置的片段 -

stream {

   server {
       listen <port>;
       ...
       ...
       proxy_pass tcpupstream;
       proxy_ssl on;
       proxy_ssl_verify on;
       proxy_ssl_server_name on;
       proxy_ssl_name ?
       ...
   }

   upstream tcpupstream {
       server shop.abc.com:<port>;
       server shop.def.com:<port>;
       server shop.xyz.com:<port>;
   }
}

我的 tcpupstream 中的每个服务器 (shop.abc.com/shop.def.com/shop.xyz.com) 基本上可以配置不同的 ssl 证书。那么如何将他们的 fqdn 作为默认 SNI 传递呢?

注意:对于 nginx http 模块,这里有一些方法可以做到这一点 - https://serverfault.com/questions/598202/make-nginx-to-pass-hostname-of-the-upstream-when- reverseproxying,但找不到流模块的任何解决方法。

任何帮助表示赞赏。

标签: nginxsslnginx-reverse-proxy

解决方案


推荐阅读