Bloco de fluxo Nginx com filtragem curinga de subdomínios

Bloco de fluxo Nginx com filtragem curinga de subdomínios

Configurei um servidor Nginx como Proxy L4 (Forward Proxy With Stream Module), com a seguinte configuração no arquivo 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;
  } 
}

tudo funciona bem, com a configuração acima. mas digamos que eu queira limitar o acesso dos URLs que passam para o meu servidor proxy. Não limitando o endereço IP, mas com nomes de URL.
Fiz uma pesquisa e configurei o seguinte arquivo de configuração e de alguma forma consegui controlar as URLs que passavam para o meu proxy.
Mas a questão começa aqui. Se um site grande for chamado, pois possui muitos links ou subdomínios carregados nos bastidores, e sabendo que limitei a passagem de URLs permitidas e que os subdomínios curinga não estão funcionando no bloco de fluxo, não consigo carregar o site solicitado completamente.
Existe uma solução para usá-lo no bloco de fluxo para oferecer suporte a caracteres curinga para subdomínio de domínio? minha nova configuração é a seguinte:

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 {
}

Responder1

Você está procurando a hostnamespalavra-chave. Com esta palavra-chave você pode usar *.example.comcomo entrada curinga para example.comdomínio. Da mesma forma que para server_namea diretiva, você pode usar .example.compara ambos example.come *.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 você pode usar qualquer regex dentro do mapbloco, ou seja

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

informação relacionada