我有以下问题:
我有几个 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 是否应该受到指责?
谢谢。