stream_sni

优质
小牛编辑
132浏览
2023-12-01
  • Tengine Stream SNI

Description

允许Tengine在Stream模块根据TLS的SNI选择Server块.

编译

Tengine的编译选项必须加上 --with-stream_ssl_module and --with-stream_sni.

指令

Syntax: server_name hostname;

Default: None;

Context: server

在Stream模块中,server_name 可以用来允许多个server块监听同一个ip:port。Tengine会根据TLS的SNI来决定请求连接匹配到哪个server块。这意味着,Stream模块的server_name必须用在SSL卸载的情况下(即listen指令后面有ssl这个参数)。


Syntax: ssl_sni_force on|off;

Default: off;

Context: stream, server

在Stream模块中,ssl_sni_force决定了如果TLS的SNI和配置的server_name不匹配,TLS握手是否被拒绝。

例子

文件: conf/nginx.conf

stream {
    server {
        listen 443 ssl;
        server_name www.taobao.com;
        ......
    }

    server {
        listen 443 ssl;
        server_name www.tmall.com;
        ......
    }
   
    #默认server块,如果没有default server块
    #则会请求会命中stream中配置的第一个server块
    server {
        listen 443 ssl default;
        .... 
    }
}

stream {
    server {
        listen 443 ssl default;
        #使得没有命中www.tmall.com的请求全部拒绝连接
        ssl_sni_force on;
        ......
    }

    server {
        listen 443 ssl;
        server_name www.tmall.com;
        ......
    }
}

注意

这个特性是实验性的。如果Nginx官方有类似的功能和该功能有冲突,那么改功能将被废弃。