Können Nginx- location
Blöcke mit einer URL- Abfragezeichenfolge übereinstimmen?
Zum Beispiel, welcher Standortblock mit einer HTTP- GET
Anfrage übereinstimmen könnte
GET /git/sample-repository/info/refs?service=git-receive-pack HTTP/1.1
Können Nginx- location
Blöcke mit einer URL- Abfragezeichenfolge übereinstimmen?
Zum Beispiel, welcher Standortblock mit einer HTTP- GET
Anfrage übereinstimmen könnte
GET /git/sample-repository/info/refs?service=git-receive-pack HTTP/1.1
?
)?Antworten:
Kurze Antwort : Nein.
Lange Antwort : Es gibt eine Problemumgehung, wenn wir nur eine Handvoll solcher Standortblöcke haben.
Hier ein Beispiel für eine Problemumgehung für 3 Standortblöcke, die bestimmten Abfragezeichenfolgen entsprechen müssen:
Sie können $ query_string, $ args oder $ arg_fieldname verwenden. Alle werden den Job machen. Weitere Informationen zu error_page finden Sie in den offiziellen Dokumenten .
Warnung: Bitte achten Sie darauf, nicht die Standard-HTTP-Codes zu verwenden .
quelle
$args ~ "service=git-send-pack"
statt$args = "service=git-send-pack"
? Dieses Formular enthält mehrere Abfrageparameter.if
und$arg_fieldname
, aber verwendetrewrite
anstelle vonerror_page
undlocation @name
. Beachten Sie, dass in diesem Beispiel meine Versuche,@name
den Ersetzungsparameter inrewrite
zu verwenden, fehlgeschlagen sind.$args ~
und sein$arg_somerandomfield =
.map
diesem Zweck kann man auch die Nginx- Funktion verwenden, die schneller ist.query
Parameter durch einen URL - Pfad ein , wie diesfeedback/{auth_key}
statt/feedback?auth_key=abc
. Auf diese Weise brauche ich nicht zu verwendenif
, ich kann Standortmuster mit definierenregex
und das wars.Ich weiß, dass diese Frage über ein Jahr alt ist, aber ich habe die letzten Tage damit verbracht, mein Gehirn wegen eines ähnlichen Problems zu zerstören. Ich wollte unterschiedliche Authentifizierungs- und Handhabungsregeln für öffentliche und private Repos, einschließlich Push und Pull. Das ist es, was ich mir endlich ausgedacht habe, also dachte ich mir, ich würde es teilen. Ich weiß
if
, dass dies eine heikle Anweisung ist, aber das scheint für mich in Ordnung zu sein:quelle