Как использовать переменную в регулярном выражении в nginx?

Как использовать переменную в регулярном выражении в nginx?

Я потратил некоторое время, пытаясь найти ответ, прежде чем задать этот вопрос:

В моем конфигурационном файле nginx есть несколько locationблоков, которые выглядят следующим образом:

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 как минимум.

Связанный контент