我在一个域上有许多服务。例如:
- example.com/data_first/
- example.com/data_home/
- example.com/data_test/
和别的
对于所有配置的服务,使用 coocie auth 的相同操作在 NGINX 配置中包含超过 20 行。
但是,我想将其概括为一个包含的配置,以便轻松添加新服务。
我在配置中写入下一个指令:
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
}
但我不能在 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/;
...
}