¿Cuál es la diferencia entre estos dos estilos diferentes de escritura SNI? ¿Alguien podría juzgar sus diferencias por principio, desempeño, etc.?
Estilo1
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 ... } }estilo2
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; ... }A partir de la pregunta, parece que está intentando escuchar en el puerto 443 para diferentes nombres de host. Las solicitudes que vienen con el nombre de host A.example.com deben reenviarse a 127.0.0.1:10086 mientras que con el nombre de host B.example.com irían a 127.0.0.1:10087 . Permítanme explicar lo que sucede detrás de escena en ambos estilos.
Estilo 1
El bloque de
streamle permite equilibrar la carga sobre TCP/UDP. El módulo ngx_stream_ssl_preread_module le permite extraer información de la solicitud sin terminación SSL/TLS. Está utilizando elmappara que las conexiones que vienen comoA.exammple.comestablezcanAen la variable$backend_namemientras que las que vienen comoB.example.comestablezcanBen la variable$backend_name. Según sus bloquesupstream, las solicitudes se reenvían a127.0.0.1:10086o127.0.0.1:10087. Dado que hay un bloque http con bloques de servidor escuchando en los puertos 10086 y 10087 respectivamente, crea una nueva conexión cada vez que cumple con esas solicitudes. La terminación ssl también ocurre dentro del bloque http.
estilo 2
Ambos bloques de servidores escuchan a través de 443 y, según el nombre de host de la solicitud, pasan por uno de los bloques de
server. La terminación de ssl ocurre antes de que la solicitud vaya a los puertos donde la aplicación realmente se está ejecutando.
Ambos estilos son buenos para lograr esto, pero personalmente prefiero el Style 2 ya que la terminación de SSL se maneja antes del reenvío de las solicitudes. Además, en el Style 1 se crea una conexión adicional que, en mi opinión, supone una ligera sobrecarga de rendimiento.