Как использовать переменную внутри 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 ""; }
Спасибо!
Кевин
Ответы
Ответ 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+)?") {
...
}