
У меня много сервисов на одном домене. Например:
- 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/;
...
}