首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用SNI?(两种不同的Nginx SNI写作风格)

如何正确使用SNI?(两种不同的Nginx SNI写作风格)
EN

Stack Overflow用户
提问于 2021-07-29 03:55:19
回答 1查看 246关注 0票数 1

这两种不同的SNI写作风格有什么区别?有人能从原则、表现等方面判断他们的不同吗?

Style1

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
    ...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 set A的形式出现,而以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中还创建了一个额外的连接,在我看来,这是一个轻微的性能开销。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68569854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档