Bloque de flujo de Nginx con filtrado de subdominios con comodines

Bloque de flujo de Nginx con filtrado de subdominios con comodines

He configurado un servidor Nginx como Proxy L4 (Forward Proxy With Stream Module), con la siguiente configuración en el archivo nginx.conf;

stream {
resolver 8.8.8.8;
server {
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $ssl_preread_server_name:$server_port;
  } 
}

Todo funciona bien, con la configuración anterior. pero digamos que quiero limitar el acceso de las URL que pasan a mi servidor proxy. No limitando la dirección IP sino con los nombres de las URL.
Investigué y configuré el siguiente archivo de configuración y de alguna manera pude controlar las URL que pasan a mi proxy.
Pero la cuestión empieza desde aquí. Si se llama a un sitio web grande, ya que tiene muchos enlaces o subdominios cargados detrás de escena, y sabiendo que he limitado las URL permitidas y los subdominios con comodines no funcionan en el bloque de transmisión, no puedo cargar el sitio web solicitado. completamente.
¿Existe una solución para utilizarlo en el bloque de transmisión para admitir comodines para el subdominio del dominio? mi nueva configuración es la siguiente:

stream {


 map $ssl_preread_server_name $name {
     ipchicken.com ipchicken.com;
     www.bbc.com www.bbc.com;
     www.bbc.co.uk www.bbc.co.uk;
     bbci.co.uk bbci.co.uk;
}


server {

    resolver 8.8.8.8;
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $name:$server_port;
   }
 }

 events {
}

Respuesta1

Estás buscando la hostnamespalabra clave. Con esta palabra clave puede utilizarla *.example.comcomo entrada comodín para example.comel dominio. De manera similar a server_namela directiva, puede usar .example.comtanto para example.comcomo para *.example.com:

map $ssl_preread_server_name $name {
    hostnames;
    .ipchicken.com    $ssl_preread_server_name;
    .bbc.com          $ssl_preread_server_name;
    .bbc.co.uk        $ssl_preread_server_name;
    .bbci.co.uk       $ssl_preread_server_name;
}

Como alternativa, puede utilizar cualquier expresión regular dentro del mapbloque, es decir

map $ssl_preread_server_name $name {
    # covers 'bbc.com', 'www.bbc.com' and 'static.bbc.com':
    ~^(?:www\.|static\.)?bbc\.com$    $ssl_preread_server_name;
    ...
}

información relacionada