要求:机器对外暴露一个 443 端口,内部根据不同的域名分别使用不同的 SSL 证书分流。
关键点:在预读取到 SNI 信息的时候,就分流到不同的内部服务上。
服务器上分别有 aaa.com 和 bbb.com 两个网站的证书,配置如下:
stream {
server {
listen 127.0.0.1:8443 ssl;
}
server {
listen 127.0.0.1:9443 ssl;
}
upstream aaa {
server 127.0.0.1:8443;
}
upstream bbb {
server 127.0.0.1:8443;
}
map $ssl_preread_server_name $name {
~*aaa.com$ aaa;
~*bbb.com$ bbb;
}
server {
listen 443 ssl;
ssl_preread on;
proxy_pass $name;
}
}
使用 ~*aaa.com$
表示匹配域名 aaa.com
及其子域名 *.aaa.com
。
参考:https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html