nginx entfernt if-Anweisungen

nginx entfernt if-Anweisungen

Ich suche hier einen kleinen Rat für einen Nginx-Neuling. Ich habe gelesen, dass if-Anweisungen in Nginx viel zu langsam sind, also hoffte ich auf ein wenig Hilfe bei der Konvertierung. Ich habe eine Reihe verschiedener Methoden ausprobiert, alle fehlgeschlagen, also dachte ich, ich stelle eine Frage.

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

Antwort1

Völlig ungetestet – wahrscheinlich mit Fehlern – aber hoffentlich ist das Konzept gültig.

Die folgende Konfiguration basiert auf dem, was ich als Ihr Ziel interpretiere: Leiten Sie alle Subdomains, außer „ftp“ und „ssh“, auf die Hauptseite um; leiten Sie /login auf /wp-admin um

Erstellen Sie einen Serverblock, um Verbindungen mit den FTP- und SSH-Subdomänen zu akzeptieren – und führen Sie dann hier etwas aus (z. B. ablehnen oder 403 zurückgeben usw.). Da dies ein statischer Servername ist, hat er Vorrang vor dem Platzhalter-Servernamen.

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

Ihr Hauptserverblock – fügen Sie Ihre Neufassung einem Standortblock hinzu

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

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

{Ich musste die /login/-Umschreibung ändern, um zu vermeiden, dass ich in einer Schleife mit der integrierten WP-Anmeldeumleitung hängen bleibe}

Zum Schluss noch ein Platzhalter für den Servernamen. Dieser passt zu jeder Subdomäne (außer den bereits übereinstimmenden), erfasst den Pfad und schreibt ihn auf Ihre Hauptseite um.

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

Der nginxSeite auf Servernamenist lesenswert, da es die Priorität verschiedener Servername-Ausdrücke erklärt.

Antwort2

Die bessere Antwort auf diese Frage ist die Verwendung desHTTP-Map-Modul. Ihr obiges Beispiel ist fast der gleiche Anwendungsfall wie der, den sie demonstriert haben. Viel übersichtlicher und einfacher zu handhaben.

verwandte Informationen