
Tengo muchos servicios en un dominio. Como ejemplo:
- ejemplo.com/data_first/
- ejemplo.com/data_home/
- ejemplo.com/data_test/
y otros
Para todos los servicios configurados, las mismas acciones para usar coocie auth contienen más de 20 líneas en la configuración de NGINX.
Pero quiero generalizarlo como una configuración incluida para agregar fácilmente nuevos servicios.
Escribo en la siguiente directiva de configuración:
map $request_uri $xService{
~^/data_(?<fp>(first|home|test))/ data_$fp;
default 0;
}
server{
...
if ($xService){
include xService.conf;
}
...
}
y mi xService.conf contiene directivas:
location /$xService/ {
add_header X-Pass-Return $xService;
... other directives include if, rewrite, proxy_pass
}
pero no puedo usar la directiva de ubicación dentro de la directiva if. ¿Es posible resolver tal problema sin enumerar todas las opciones de ubicación posibles?
Por ejemplo. Yo uso la siguiente configuración:
location ^~ /data_first/{
set $xService data_first;
include xService.conf;
}
y otra ubicación, pero no necesito escribir la ubicación para ningún URI de servicio.
Respuesta1
¿Por qué se utilizan un mapa y declaraciones 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/;
...
}
}
Respuesta2
Puede ser simplemente usar uno simple:
location ~ ^/(data_\w+)/ {
add_header X-Pass-Return /$1/;
...
}