
1 つのドメインに複数のサービスがあります。例:
- example.com/data_first/
- example.com/data_home/
- example.com/data_test/
その他
すべてのサービスに対して、NGINX 構成に 20 行を超える coocie auth の使用に関する同じアクションが設定されています。
しかし、新しいサービスを簡単に追加できるように、これを 1 つの構成として一般化したいと考えています。
config に次のディレクティブを記述します:
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/;
...
}