这两种不同的SNI写作风格有什么区别?有人能从原则、表现等方面判断他们的不同吗?
Style1
stream{
map $ssl_preread_server_name $backend_name{
A.example.com A;
B.example.com B;
}
upsteam A{
server 127.0.0.1:10086
}
upsteam B{
server 127.0.0.1:10087
}
}
http{
server{
listen 10086 ssl http2;
server_name A.example.com
...
}
}
Style2
server {
listen 127.0.0.1:443 ssl;
server_name A.example.com;
...
}
server {
listen 127.0.0.1:443 ssl;
server_name B.example.com;
...
}
发布于 2021-08-08 07:01:33
从问题上看,您正在尝试侦听443端口上的不同主机名。带有主机名A.example.com
的请求应该被转发到127.0.0.1:10086
,而带有主机名的B.example.com
将被转发到127.0.0.1:10087
。让我来解释一下这两种风格的幕后发生了什么。
风格1
stream
块允许您在TCP/UDP上负载平衡。模块模块允许您在不终止ssl/tls的情况下从请求中提取信息。您使用的是map
,所以连接在变量$backend_name
中以A.exammple.com
setA
的形式出现,而以B.example.com
的形式在变量$backend_name
中设置B
。基于您的upstream
块,请求要么被转发到127.0.0.1:10086
,要么被转发到127.0.0.1:10087
。由于有一个http块,服务器块分别侦听端口10086和10087,所以每次执行这些请求时,它都会创建一个新连接。ssl终止也发生在http块中。
风格2
这两个服务器块都侦听超过443,并且取决于请求的主机名,它要么通过一个
server
块。ssl终止发生在请求到达实际运行应用程序的端口之前。
这两种样式都可以很好地实现这一点,但就我个人而言,我更喜欢Style 2
,因为ssl终端是在转发请求之前处理的。此外,在Style 1
中还创建了一个额外的连接,在我看来,这是一个轻微的性能开销。
https://stackoverflow.com/questions/68569854
复制相似问题