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 rewrite
oder return
in einzufügen if
; ein dort vorgeschlagener Workaround besteht darin, zu verwenden error_page
und return
den 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 include
diese Datei in Ihre location
Blö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
/ return
Paar oder etwas wie
try_files /nonexistent @validation