
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 hostnames
Schlüsselwort. Dieses Schlüsselwort können Sie *.example.com
als Platzhalter für example.com
die Domäne verwenden. Ähnlich wie bei der Direktive können Sie für beides und server_name
verwenden :.example.com
example.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 map
Blocks 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;
...
}