Eu acho que algo nesse sentido deve funcionar:
set $primary_domain "xxx.example.com";
if ($host != $primary_domain) {
rewrite ^ $scheme://$primary_domain permanent;
}
Eu tenho um servidor nginx que responde a vários domínios e desejo redirecionar todas as solicitações para o domínio principal.
Exemplo: website respondendo por xxx xxx.example.com yyy.example.com $hostname
para http
e https
.
Eu quero configurar o servidor de forma que todas as solicitações para os outros nomes de domínio sejam redirecionadas para xxx.example.com
.
A maneira mais eficiente e limpa de fazer isso é configurar dois blocos separados do servidor {} - um para fazer redirecionamentos e outro (com nome canônico) para manipular solicitações.
Exemplo de configuração:
server {
listen 80;
listen 443 ssl;
server_name xxx yyy.example.com $hostname;
ssl_certificate ...
ssl_certificate_key ...
return 302 $scheme://xxx.example.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name xxx.example.com;
ssl_certificate ...
ssl_certificate_key ...
...
}
Documentação:
Aqui está uma variante do anser de Brenton Alker, usando a $server_name
variable para reutilizar o valor da diretiva server_name
.
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^ $scheme://$server_name permanent;
}
Ou, para manter os parâmetros de consulta:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^/(.*) $scheme://$server_name/$1 permanent;
}
Aqui, $server_name
se refere ao nome do servidor principal, que é o primeiro nome em a diretiva server_name
, enquanto $host
se refere ao nome do host fornecido na solicitação HTTP.
Observe que a instrução if
na configuração nginx nem sempre faz o que você esperaria e seu uso é desencorajado por alguns. Veja também link