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:
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
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:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}