Repartir el tráfico HTTPS por nombre sin descifrarlo: el módulo stream de nginx

En muchas ocasiones me he encontrado con la necesidad de configurar iptables o nftables con reglas DNAT para redirigir el tráfico web entrante a un servidor interno. Funciona bien mientras haya un único destino, pero tiene una limitación: el kernel solo ve direcciones y puertos, así que todo el tráfico al puerto 443 va a parar al mismo servidor. ¿Y si tengo varios servidores web detrás y quiero repartir las conexiones según el nombre de dominio?
La solución habitual sería instalar un proxy inverso, pero eso obliga a descifrar el tráfico TLS en esa máquina y, por lo tanto, a tener allí los certificados de todos los servicios, algo que no siempre es posible ni deseable. Para estos casos, nginx nos ofrece el módulo stream, que nos permite repartir las conexiones por nombre sin descifrarlas.



