
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 hostnames
palabra clave. Con esta palabra clave puede utilizarla *.example.com
como entrada comodín para example.com
el dominio. De manera similar a server_name
la directiva, puede usar .example.com
tanto para example.com
como 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 map
bloque, 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;
...
}