Объявите конфигурацию NGINX для многих местоположений с переменной

Объявите конфигурацию NGINX для многих местоположений с переменной

У меня много сервисов на одном домене. Например:

  • example.com/data_first/
  • example.com/data_home/
  • example.com/data_test/

и другие

Для всех настроенных служб одни и те же действия по использованию coocie auth содержат более 20 строк в конфигурации NGINX.

Но я хочу обобщить это как одну включенную конфигурацию для легкого добавления новых служб.

Пишу в конфиге следующую директиву:

map $request_uri $xService{
    ~^/data_(?<fp>(first|home|test))/ data_$fp;
    default 0;
}
server{
...
    if ($xService){
        include xService.conf;
    }
...
}

и мой xService.conf содержит директивы:

location /$xService/ {
    add_header X-Pass-Return $xService;
    ... other directives include if, rewrite, proxy_pass 
}

но я не могу использовать директиву location внутри директивы if. Можно ли решить такую ​​проблему без перечисления всех возможных вариантов location?

Например, я использую следующую конфигурацию:

location ^~ /data_first/{
    set $xService data_first;
    include xService.conf;
}

и другое местоположение, но мне не нужно писать местоположение для любого URI службы.

решение1

Зачем используются операторы map и if?

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

решение2

Можно просто использовать простой вариант:

location ~ ^/(data_\w+)/ {
    add_header X-Pass-Return /$1/;
    ...
}

Связанный контент