Estou procurando um pequeno conselho aqui para um novato nginx. Eu tenho lido que as instruções if são muito lentas no nginx, então esperava uma ajudinha para convertê-las. Eu tentei vários métodos diferentes, todos falharam, então pensei em fazer uma pergunta.
server_name *.noconformity.co noconformity.co;
# remove all sub domains and www
if ($http_host !~* "^(ftp|ssh)\.noconformity\.co$"){
set $rule_0 1$rule_0;
}
if ($http_host ~ "^([^.]+)\.noconformity\.co$"){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
break;
}
# Login Short Cut
if ($uri ~* "/login") {
rewrite ^/login(/.*)? /wp-admin$1;
}
Responder1
Completamente não testado - muito provavelmente com erros - mas espero que o conceito seja válido.
A configuração abaixo é baseada no que interpreto como seu objetivo: redirecionar todos os subdomínios, exceto 'ftp' e 'ssh' para o site principal; Redirecionar /login para /wp-admin
Crie um bloco de servidor para aceitar conexões com os subdomínios ftp e ssh - e então faça algo aqui (como negar ou retornar 403, etc) - como este é um server_name estático, ele tem precedência sobre o curinga server_name.
server {
server_name ftp.noconformity.co ssh.noconformity.co;
#additional options
}
Seu bloco de servidor principal - adicione sua reescrita a um bloco de localização
server{
server_name noconformity.co;
#root ....;
#your main config
location ~* /login/ {
rewrite ^/login/(.*)? /wp-admin$1;
}
}
{Tive que alterar /login/rewrite para evitar ficar preso em um loop com o redirecionamento de login do WP integrado}
Finalmente, um curinga server_name - corresponderá a qualquer subdomínio (exceto aqueles já correspondentes), capturará o caminho e reescreverá em seu site principal.
server {
server_name *.noconformity.co;
rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
}
O nginxpágina em server_namesvale a pena ler, pois explica a prioridade de diferentes expressões server_name.
Responder2
A melhor resposta para esta pergunta é usar oMódulo de mapa HTTP. Seu exemplo acima é quase o mesmo caso de uso que eles demonstraram. Muito mais limpo e fácil de gerenciar.