
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 hostnames
palavra-chave. Com esta palavra-chave você pode usar *.example.com
como entrada curinga para example.com
domínio. Da mesma forma que para server_name
a diretiva, você pode usar .example.com
para ambos example.com
e *.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 map
bloco, 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;
...
}