nginx eliminar declaraciones if

nginx eliminar declaraciones if

Estoy buscando un pequeño consejo aquí para un novato en nginx. He estado leyendo que si las declaraciones son muy lentas en nginx, esperaba un poco de ayuda para convertirlas. He probado muchos métodos diferentes, todos fallidos, así que pensé en hacer una pregunta.

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;
}

Respuesta1

No ha sido probado en absoluto, es muy probable que tenga errores, pero es de esperar que el concepto sea válido.

La siguiente configuración se basa en lo que interpreto que es su objetivo: redirigir todos los subdominios, excepto 'ftp' y 'ssh' al sitio principal; Redirigir /iniciar sesión a /wp-admin

Cree un bloque de servidor para aceptar conexiones a los subdominios ftp y ssh, y luego haga algo aquí (como negar o devolver 403, etc.). Dado que se trata de un nombre_servidor estático, tiene prioridad sobre el nombre_servidor comodín.

server {
    server_name ftp.noconformity.co ssh.noconformity.co;
    #additional options
}

Su bloque de servidor principal: agregue su reescritura a un bloque de ubicación

server{
    server_name noconformity.co;
    #root ....; 
    #your main config

    location ~* /login/ {
        rewrite ^/login/(.*)? /wp-admin$1;
    }
}

{Tuve que cambiar la reescritura de /login/ para evitar quedarme atascado en un bucle con la redirección de inicio de sesión de WP incorporada}

Finalmente, un comodín nombre_servidor: esto coincidirá con cualquier subdominio (excepto aquellos que ya coinciden), capturará la ruta y la reescribirá en su sitio principal.

server {
    server_name *.noconformity.co;
    rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
}

el nginxpágina en server_namesVale la pena leerlo, ya que explica la prioridad de diferentes expresiones de nombre_servidor.

Respuesta2

La mejor respuesta a esta pregunta es usar elMódulo de mapa HTTP. Su ejemplo anterior es casi el mismo caso de uso que han demostrado. Mucho más limpio y más fácil de manejar.

información relacionada