nginx HTTPS 直通多个域名

nginx HTTPS 直通多个域名

我有以下问题:

我有几个 HTTPS 服务在 docker 容器内运行。我还设置了一个 nginx 容器,以便它将 URL 重定向到相关容器。各个容器中的每个 https 服务都使用带有通配符 dns 的证书。就我而言:

[ alternate_names ]

DNS.1        = *.myapps.local

我已将 nginx 配置为不终止 SSL 连接,而是让它传递到后端服务器:

重定向http配置文件

 Redirect any http request on port 80 to https

server {
  listen        80;

  server_name   _;

  return 301 https://$host$request_uri;
}

直通流

# https://gerco.dev/NGINX-Reverse-Proxy-with-TLS-Passthrough/


map $ssl_preread_server_name $name {
        test1.myapps.local  server1_https;
        test2.myapps.local  server2_https;
        default $ssl_preread_server_name;
}


upstream server1_https {
        server service1:443; //---------> Since I've linked the containers in the compose file, this is valid
}

upstream server2_https {
        server service2:443; //---------> Since I've linked the containers in the compose file, this is valid
}


server {
        listen 443;
        listen [::]:443;
        ssl_preread on;
        proxy_ssl_server_name on;
        # proxy_ssl_session_reuse off;
        proxy_pass $name;

}

我已经设置了/etc/hosts文件如下:

192.168.1.50  test1.myapp.local test2.myapp.local

问题是:

当我访问 test1.myapp.local --> service1 的页面被呈现。当我访问 test2.myapp.local --> service1 的页面仍然得到渲染。

我在同一个 IP 上托管了 2 个子域名。每次,无论我访问这两个 URL 中的哪一个,我最终都会转到第一个服务。

我该如何修复这个问题?我的理解是,这$ssl_preread_server_name应该告诉我我访问的域名?我在证书中使用通配符 alertnate_name 是否应该受到指责?

谢谢。

相关内容