Nginx-Stream-Block mit Wildcard-Filterung von Subdomains

Nginx-Stream-Block mit Wildcard-Filterung von Subdomains

Ich habe einen Nginx-Server als L4-Proxy (Forward Proxy With Stream Module) mit der folgenden Konfiguration in der Datei nginx.conf eingerichtet:

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

mit der obigen Konfiguration funktioniert alles einwandfrei. Nehmen wir jedoch an, ich möchte den Zugriff auf die an meinen Proxyserver weitergeleiteten URLs beschränken. Nicht durch Beschränkung der IP-Adresse, sondern durch URL-Namen.
Ich habe nachgeforscht und die folgende Konfigurationsdatei eingerichtet und konnte damit irgendwie die an meinen Proxy weitergeleiteten URLs steuern.
Doch hier beginnt das Problem. Wenn eine große Website aufgerufen wird, kann ich die angeforderte Website nicht vollständig laden, da sie viele Links oder Subdomains enthält, die im Hintergrund geladen werden, und da ich weiß, dass ich die zulässigen URLs beschränkt habe und die Platzhalterfunktion für Subdomains im Streamblock nicht funktioniert.
Gibt es eine Lösung, dies im Streamblock zu verwenden und Platzhalter für Subdomains von Domänen zu unterstützen? Meine neue Konfiguration sieht folgendermaßen aus:

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

Antwort1

Sie suchen nach dem hostnamesSchlüsselwort. Dieses Schlüsselwort können Sie *.example.comals Platzhalter für example.comdie Domäne verwenden. Ähnlich wie bei der Direktive können Sie für beides und server_nameverwenden :.example.comexample.com*.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;
}

Alternativ können Sie innerhalb des mapBlocks jeden beliebigen regulären Ausdruck verwenden, d. h.

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

verwandte Informationen