Подтвердить что ты не робот

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

У меня есть система кэширования, которую мне нужно обойти, если имя пользователя (в cookie) найдено в $request_uri. Я пытаюсь сделать что-то подобное, но не могу заставить переменную интерполировать в регулярное выражение. Любые предложения понравятся?

Я могу установить переменную $me в файле cookie; Я просто не могу заставить его интерполировать в регулярное выражение.

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ $me) { set $chk ""; } 
if ($chk == "need") { rewrite ^ /testing }

Я всегда пробовал такие вещи:

if ($uri ~ "by-{$me}") { set $chk ""; }

Спасибо! Кевин

4b9b3361

Ответ 1

Это не совсем то, что я спросил, но я думаю, что это сработает для моих целей. Мне все еще интересно, как интерполировать переменную внутри регулярного выражения nginx PCRE, если кто-то еще знает!

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ /by-([^-]+)/) { set $by $1; }
if ($by = $me) {set $chk "";}

Ответ 2

Можно включить переменную в выражение регулярного выражения, просто поставив $перед переменной... не нужно делать ${}

поэтому я полагаю в вашем случае

if ($uri ~ "by-$me") { set $chk ""; }

регулярное выражение будет тогда равно-by-kevin

Я работал, как это, для более сложного правила регулярного выражения

где я хотел, чтобы orgin соответствовал списку возможных доменных имен

set $domainWhitelist "yahoo\.com|google\.com|foo\.com";
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") {
...
}