Können wir von einem Standort in Nginx zu einem anderen Standort springen?

Können wir von einem Standort in Nginx zu einem anderen Standort springen?

Ich versuche, so etwas zu erreichen:

location /location1/{
    if ($arg_api_key = a_valid_api_key) {
         proxy_pass http://localhost:8080;
    }
    # else jump to location2
}
location /location2/{
    # a lot of validation code here
}

Wie machen wir das in nginx? Oder gibt es eine bessere Möglichkeit, damit umzugehen?

Antwort1

Denken Sie zunächst daran,wenn es böse istund vermeiden Sie, irgendetwas außer rewriteoder returnin einzufügen if; ein dort vorgeschlagener Workaround besteht darin, zu verwenden error_pageund returnden zur Verarbeitung der Anfrage verwendeten Speicherort zu ändern.

Alshier schon geantwortet, die Möglichkeit, Standorteinstellungen in Nginx wiederzuverwenden besteht darin, sie in eine separate Datei und includediese Datei in Ihre locationBlöcke zu verschieben.

Die Kombination dieser Lösungen führt zu:

/etc/nginx/validation_code.conf

# a lot of validation code here

Hauptkonfiguration

location /location1/ {
    error_page 418 = @proxy;
    recursive_error_pages on;
    if ($arg_api_key = a_valid_api_key) {
        return 418;
    }
    include /etc/nginx/validation_code.conf;
}

location /location2/ {
    include /etc/nginx/validation_code.conf;
}

location @proxy {
    proxy_pass http://localhost:8080;
}

Sie können auch darüber nachdenken, einen benannten Speicherort für Ihren Validierungscode zu verwenden, anstatt eine separate Datei zu erstellen. Sie benötigen jedoch einige Tricks, um zu diesem benannten Speicherort zu wechseln – z. B. ein anderes error_page/ returnPaar oder etwas wie

    try_files /nonexistent @validation

verwandte Informationen