Wie kann ich dieselbe Regel für zwei Standorte in der NGINX-Konfiguration haben?
Ich habe folgendes versucht
server {
location /first/location/ | /second/location/ {
..
..
}
}
aber nginx reload warf diesen Fehler:
nginx: [emerg] invalid number of arguments in "location" directive**
nginx
nginx-location
user1661010
quelle
quelle
nginx/1.13.2
proxy_pass
, lesenEine andere Möglichkeit besteht darin, die Regeln an zwei Präfixpositionen mithilfe einer enthaltenen Datei zu wiederholen. Da Präfixpositionen in der Konfiguration positionsunabhängig sind, kann ihre Verwendung Verwirrung stiften, wenn Sie später andere Regex-Positionen hinzufügen. Wenn Sie Regex-Positionen vermeiden, wenn dies möglich ist, kann Ihre Konfiguration reibungslos skaliert werden.
Hier ist ein Beispiel shared.conf:
quelle
shared.conf
Beispiel und Ort hinzufügen ?Sowohl der Regex als auch die enthaltenen Dateien sind gute Methoden, und ich verwende diese häufig. Eine andere Alternative ist die Verwendung eines "benannten Ortes", was in vielen Situationen - insbesondere in komplizierteren - ein nützlicher Ansatz ist. Die offizielle Seite "If is Evil" zeigt im Wesentlichen Folgendes als eine gute Möglichkeit, Dinge zu tun:
Diese verschiedenen Ansätze haben Vor- und Nachteile. Ein großer Vorteil eines regulären Ausdrucks besteht darin, dass Sie Teile des Spiels erfassen und zum Ändern der Antwort verwenden können. Natürlich können Sie mit den anderen Ansätzen normalerweise ähnliche Ergebnisse erzielen, indem Sie entweder eine Variable im ursprünglichen Block festlegen oder verwenden
map
. Der Nachteil des Regex-Ansatzes besteht darin, dass er unhandlich werden kann, wenn Sie eine Vielzahl von Standorten abgleichen möchten. Außerdem passt die niedrige Priorität eines Regex möglicherweise nicht dazu, wie Sie Standorte abgleichen möchten - ganz zu schweigen davon, dass es anscheinend Auswirkungen auf die Leistung gibt in einigen Fällen von regulären Ausdrücken.Der Hauptvorteil des Einfügens von Dateien (soweit ich das beurteilen kann) besteht darin, dass es etwas flexibler ist, was genau Sie einschließen können - es muss beispielsweise kein vollständiger Speicherortblock sein. Aber es ist auch subjektiv etwas klobiger als die genannten Orte.
Beachten Sie auch, dass es eine verwandte Lösung gibt, die Sie möglicherweise in ähnlichen Situationen verwenden können: verschachtelte Speicherorte. Die Idee ist, dass Sie mit einem sehr allgemeinen Speicherort beginnen, eine Konfiguration anwenden, die mehreren der möglichen Übereinstimmungen gemeinsam ist, und dann separate verschachtelte Speicherorte für die verschiedenen Arten von Pfaden haben, die Sie abgleichen möchten. Zum Beispiel könnte es nützlich sein, so etwas zu tun:
quelle
Dies ist ein kurzer, aber effizienter und bewährter Ansatz:
location ~ (patternOne|patternTwo){ #rules etc. }
So kann man leicht mehrere Muster mit einfacher Pipe-Syntax haben, die auf denselben Standortblock / dieselben Regeln verweisen.
quelle