Varnish всегда кеширует при наличии определенного cookie

Мне нужно правило в моем vcl_recv, которое проверяет, присутствует ли определенный файл cookie, и если да, всегда обслуживает кешированный файл (назовем этот файл cookie VARNISH_USE_CACHE)

Однако у меня также есть правило, которое запускается после этого для проверки файла cookie сеанса (и если он существует, всегда передается в apache), это правило все равно должно выполняться, если VARNISH_USE_CACHE отсутствует.

Я не совсем уверен, как проверять один файл cookie, а затем проверять другой. Я попытался назначить файлы cookie временной переменной и проверить там. Но я не должен понимать, как работает vcl, поскольку, когда я это делаю, я получаю полный файл cookie без каких-либо удалений.

Вот мой код в vcl_rec:

set req.http.tempCookie = ";" + req.http.Cookie;
set req.http.tempCookie = regsuball(req.http.tempCookie, ";(VARNISH_USE_CACHE)=", "; \1=");
set req.http.tempCookie = regsuball(req.http.tempCookie, ";[^ ][^;]*", "");
set req.http.tempCookie = regsuball(req.http.tempCookie, "^[; ]+|[; ]+$", "");

Поэтому я ожидаю, что req.http.tempCookie будет пустым, если нет VARNISH_USE_CACHE, вместо этого он всегда имеет все файлы cookie из req.http.Cookie.


person leon.nk    schedule 10.07.2013    source источник


Ответы (1)


Ах разобрался:

Забыл эту строку

set req.http.tempCookie = regsuball(req.http.tempCookie, "; +", ";");

Итак, код выглядит так:

set req.http.tempCookie = ";" + req.http.Cookie;
set req.http.tempCookie = regsuball(req.http.tempCookie, "; +", ";");
set req.http.tempCookie = regsuball(req.http.tempCookie, ";(VARNISH_USE_CACHE)=", "; \1=");
set req.http.tempCookie = regsuball(req.http.tempCookie, ";[^ ][^;]*", "");
set req.http.tempCookie = regsuball(req.http.tempCookie, "^[; ]+|[; ]+$", "");
person leon.nk    schedule 10.07.2013