Я тестирую исправленную конфигурацию Varnish, и мне нужно посмотреть, попадают ли определенные URL-адреса в кеш или нет. Кажется, не нравится несколько параметров.
Изменение конфигурации Varnish состоит в том, чтобы не рассматривать URL-адреса с определенными параметрами как уникальное содержимое. Например.
/news/tech
/news/tech?itq=1001
/news/tech?itq=1002&ito=3553
Все должны быть эквивалентны.
Сценарий 1
Запрос страницы, которая еще не была кеширована:
curl -I 'http://example.com/news/tech'
Результат:
X-Varnish-Cache: MISS
Повторная отправка того же запроса дает следующий результат:
X-Varnish-Cache: HIT
Сценарий 2
Повторный запрос указанного выше URL-адреса, но с параметром:
curl -I 'http://example.com/news/tech?itq=1001'
Это один из параметров, который нельзя рассматривать как уникальный контент.
Результат:
X-Varnish-Cache: HIT
Сценарий 3
Запрос со вторым параметром:
curl -I 'http://example.com/news/tech?itq=1001&ito=3553'
Отклик:
X-Varnish-Cache: MISS
Вроде конфиг Varnish работает на? но не для &
Вот соответствующая строка в моей конфигурации Varnish:
set req.url = regsuball(req.url, "([\?|\&])+(utm_campaign|utm_content|utm_medium|utm_source|utm_term|ITO|et_cid|et_rid|qs|itq|ito|itx\[idio\])=[^&\s]*&?", "\1");
Я предполагаю, что это выполняется только один раз, поэтому несколько параметров не будут удалены. Как бы я это сделал?
2 ответа
После небольших экспериментов я нашел способ сделать это.
# Strip out query parameters that do not affect the page content
set req.url = regsuball(req.url, "([\?|\&])+(utm_campaign|utm_content|utm_medium|utm_source|utm_term|ITO|et_cid|et_rid|qs|itq|ito|itx\[idio\])=[^&\s]+", "\1");
# Get rid of trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");
# Replace ?&
set req.url = regsub(req.url, "(\?\&)", "\?");
2-я и 3-я команды - это просто очистка. Но, похоже, это работает.
Реализация @thirtyish вызывает проблемы, когда используется с комбинацией дополнительных параметров get.
Например ?utm_campaign=1&utm_source=2&my_add_parameter=3
не работает.
Если мы изменим порядок на ?my_add_parameter=3=utm_campaign=1&utm_source=2
, будет работать. Под неработающим я подразумеваю, что он генерирует несколько знаков &
в запросе url.
Я обновляю регулярное выражение, чтобы исправить это.
set req.url = regsuball(req.url, "[\?\&](utm_\w+|hsa_\w+|gclid|fbclid|pc)=[^&\s]+", "");
# trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");
set req.url = regsub(req.url, "(\?\&)|(\&)", "\?");
Похожие вопросы
Новые вопросы
varnish
Varnish - это открытый HTTP-прокси с открытым исходным кодом с широкими возможностями кеширования, то есть веб-ускоритель. Он часто используется перед веб-сайтами для кэширования веб-страниц в памяти.