
Ich habe viele Dienste auf einer Domain. Als Beispiel:
- beispiel.com/data_first/
- beispiel.com/data_home/
- beispiel.com/datentest/
und andere
Für alle konfigurierten Dienste enthalten die gleichen Aktionen zur Verwendung der Cookie-Authentifizierung über 20 Zeilen in der NGINX-Konfiguration.
Ich möchte es jedoch als eine enthaltene Konfiguration verallgemeinern, um problemlos neue Dienste hinzufügen zu können.
Ich schreibe in die Konfiguration die nächste Direktive:
map $request_uri $xService{
~^/data_(?<fp>(first|home|test))/ data_$fp;
default 0;
}
server{
...
if ($xService){
include xService.conf;
}
...
}
und meine xService.conf enthält Anweisungen:
location /$xService/ {
add_header X-Pass-Return $xService;
... other directives include if, rewrite, proxy_pass
}
aber ich kann die Standortanweisung nicht innerhalb der if-Anweisung verwenden. Ist es möglich, ein solches Problem zu lösen, ohne alle möglichen Standortoptionen aufzulisten?
Beispielsweise verwende ich die folgende Konfiguration:
location ^~ /data_first/{
set $xService data_first;
include xService.conf;
}
und andere Standorte, aber ich muss für keine Service-URI den Standort schreiben.
Antwort1
Warum werden eine Map und if-Anweisungen verwendet?
server {
server_name example.com;
...
location /data_first {
include snippets/YOUR_COMMON_CONFIG;
# add the stuff specific to /data_first here...
add_header X-Pass-Return /data_first/;
...
}
location /data_home {
include snippets/YOUR_COMMON_CONFIG;
# add the stuff specific to /data_home here...
add_header X-Pass-Return /data_home/;
...
}
location /data_test {
include snippets/YOUR_COMMON_CONFIG;
# add the stuff specific to /data_test here...
add_header X-Pass-Return /data_test/;
...
}
}
Antwort2
Vielleicht verwenden Sie einfach eine einfache Option:
location ~ ^/(data_\w+)/ {
add_header X-Pass-Return /$1/;
...
}