В настоящее время я работаю / тестирую функцию микрокэша в настройке обратного прокси-сервера NGINX для динамического содержимого.
Одна большая проблема, которая возникает, это сеансы / файлы cookie, которые необходимо игнорировать, в противном случае пользователи будут входить в систему со случайными учетными записями на сайтах.
В настоящее время я игнорирую популярные файлы CMS, например:
if ($http_cookie ~* "(joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|wordpress_logged_in_[a-zA-Z0-9]+|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+")
{
# set ignore variable to 1
# later used in:
# proxy_no_cache $IGNORE_VARIABLE;
# proxy_cache_bypass $IGNORE_VARIABLE;
# makes sense ?
}
Однако это становится проблемой, если я хочу добавить больше файлов cookie в список игнорируемых. Не говоря уже о том, что использование слишком большого количества операторов if в NGINX не рекомендуется согласно документации.
Мои вопросы: можно ли это сделать с помощью метода карты? Я видел, что регулярное выражение в карте отличается (или, возможно, я ошибаюсь).
Или есть другой способ эффективного игнорирования / обхода файлов cookie?
У меня много поисков по stackoverflow, и хотя есть так много разных примеров; Я не смог найти что-то конкретное для своих нужд.
Спасибо
Обновление:
Много чтения и «копания» в интернете (мы могли бы просто сказать, что Google), и я нашел довольно интересные примеры.
Однако Я очень смущен с ними, так как я не полностью понимаю использование регулярных выражений , и я боюсь реализовать такое, не понимая этого.
Пример 1:
map $http_cookie $cache_uid {
default nil;
~SESS[[:alnum:]]+=(?<session_id>[[:alnum:]]+) $session_id;
}
В этом примере я могу заметить, что регулярное выражение сильно отличается от
те, которые используются в блоках "если". Я не понимаю, почему картина
начинается без "" и напрямую с помощью знака ~ .
Я не понимаю, что означает [[: alnum:]] + ? Я ищу это
но я не смог найти документацию. (или, может быть, я пропустил это)
Я вижу, что автор устанавливал "nil" по умолчанию, это будет
не относится к моему делу.
Пример 2:
map $http_cookie $cache_uid {
default '';
~SESS[[:alnum:]]+=(?<session_id>[[:graph:]]+) $session_id;
}
- Те же точки, что и в примере 1, но на этот раз я вижу [[: graph:]] + .
Что это?
Мой пример (не тестировался):
map $http_cookie $bypass_cache {
"~*wordpress_(?!test_)[a-zA-Z0-9_]+" 1;
"~*wp-postpass|wordpress_logged_in_[a-zA-Z0-9]+" 1;
"~*comment_author_[a-zA-Z0-9_]+" 1;
"~*[a-zA-Z0-9]+_session)" 1;
default 0;
}
В моем псевдо-примере регулярное выражение должно быть неверным, поскольку я не нашел примеров файлов cookie с таким регулярным выражением.
Итак, еще раз моя цель - создать список файлов cookie в стиле карты, для которых я могу обойти кеш, с правильным регулярным выражением.
Любые советы / примеры очень ценятся.