nginx remover instruções if

nginx remover instruções if

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.

informação relacionada