変数を使用して複数の場所のNGINX設定を宣言する

変数を使用して複数の場所のNGINX設定を宣言する

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

関連情報