Use uma captura nomeada na diretiva server_name
. Algo parecido com isto:
server {
server_name ~^(?<name>.+).example.net$;
return 301 http://$name.example.com$request_uri;
}
Veja este documento para detalhes.
Eu tenho 2 nomes de domínios
e muitos sub-domaines
Atualmente, tenho 50 blocos como este:
server {
listen 80;
server_name demo1.exemple.*;
location / {
proxy_pass http://127.0.0.1:8081;
}
}
server {
listen 80;
server_name demo2.exemple.*;
location / {
proxy_pass http://127.0.0.1:8082;
}
}
Esta solução está funcionando, mas não está realmente otimizada.
Eu tentei "retornar" .com em vez de .net, para evitar a redundância "X", mas não sei como incluir o subdomínio com uma variável.
server {
server_name *.demo.net;
return 301 http://demo.com$request_uri;
}
Deve haver uma maneira de respeitar as melhores práticas do nginx e evitar toda essa redundância, mas não sei como gerenciar o problema.
Use uma captura nomeada na diretiva server_name
. Algo parecido com isto:
server {
server_name ~^(?<name>.+).example.net$;
return 301 http://$name.example.com$request_uri;
}
Veja este documento para detalhes.
Se eu entendi corretamente, você tem um monte de sites fornecidos em portas diferentes e você fez cada um bloco de servidor no NginX. Se eles são sites completamente separados, então esta é a única maneira que eu penso. No entanto, se os sites forem todos servidos em uma pasta raiz, você deverá criar apenas um bloco de servidor com o nome de todos os nomes de domínio.
Vou me queimar e ser morto por causa disso, mas eu consideraria usar IF para verificar o nome do domínio e redirecionar os usuários de acordo com ele. E eu sei ... SE É MAL!
Tags nginx