nginx の正規表現で変数を使用するにはどうすればいいですか?

nginx の正規表現で変数を使用するにはどうすればいいですか?

この質問を書く前に、私は答えを見つけるのにしばらく時間を費やしました。

location私の nginx 設定ファイルには次のようなブロックがいくつかあります。

location ~ ^/(doc|img|bla|foo)/metadata/$ { ... }

location ~ ^/(doc|img|bla|foo)/deleted/$ { ... }

location ~ ^/(doc|img|bla|foo)/something/$ { ... }

そこで、繰り返し正規表現を、セクションで設定した変数にリファクタリングするのが良いアイデアだと思いましたserver(将来的に追加する必要があることがわかっているため)。次のようになります。

server {
     set $my_regex doc|img|blah|foo;

     # I also tried this one:
     set $my_regex "doc|img|blah|foo";
     ....
}

これをロケーション ブロック内で再利用します。

# this doesn't have any effect
location ~ ^/($my_regex)/metadata/$ { ... }

# this one neither
location ~ ^/(\$my_regex)/deleted/$ { ... }

# and this one neither
location ~ ^/(${my_regex})/something/$ { ... }

何かアイデアはありますか? ありがとう!

答え1

マッチングに変数を使用する方法はありませんlocation

もしそれを望むなら、おそらく何か間違っているでしょう。この場合は、ネスト場所を試してみることができます。

答え2

こちらをご確認くださいリンクNGINXで言ったようにドキュメンテーション

The PCRE library supports named captures using the following syntax:

?<name> Perl 5.10 compatible syntax, supported since PCRE-7.0
?'name' Perl 5.10 compatible syntax, supported since PCRE-7.0
?P<name>    Python compatible syntax, supported since PCRE-4.0

名前付きキャプチャは PCRE の機能であり、バージョンによって使用できる構文が異なります。使用する構文には、少なくとも PCRE 7.0 が必要です。

関連情報