Deklarieren Sie die NGINX-Konfiguration für mehrere Standorte mit Variablen

Deklarieren Sie die NGINX-Konfiguration für mehrere Standorte mit Variablen

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/;
    ...
}

verwandte Informationen