Varnish удаляет пользовательский сеанс

80
11

У меня есть большинство страниц, кэшированных с помощью лака, и я получаю информацию о сеансе через ESI, чтобы показать имя пользователя в заголовке.

В настоящий момент пользователи могут войти (области входа не кэшируются), и все время, пока они остаются в области входа, все работает нормально, но как только вы нажимаете ссылку на кэшированную страницу, данные сеанса теряются, и теперь они регистрируются. из.

Я не вижу упоминаний об удалении файлов cookie и т.д., Но я новичок в VCL и могу неправильно настроить его.

У меня есть ESI в /esi/header поэтому я установил TTL в 0 и включил ESI на всех других страницах.

Большая часть остального - это фрагменты кода, найденные на сайте Varnish.

Я пытаюсь сохранить сессию, пока они не выйдут вручную.

Вот мой VCL, спасибо.

# https://github.com/mattiasgeniar/varnish-5.0-configuration-templates/blob/master/default.vcl

vcl 4.0;

import std;

backend steam {
.host = "webserver";
.port = "8081";
}

acl purge {
# ACL we'll use later to allow purges
"localhost";
"127.0.0.1";
"::1";
}

# Called at the beginning of a request, after the complete request has been received and parsed.
# Its purpose is to decide whether or not to serve the request, how to do it, and, if applicable,
# which backend to use.
sub vcl_recv {

set req.backend_hint = steam;

# Strip hash, server doesn't need it.
if (req.url ~ "\#") {
set req.url = regsub(req.url, "\#.*$", "");
}

# Strip a trailing ? if it exists
if (req.url ~ "\?$") {
set req.url = regsub(req.url, "\?$", "");
}

set req.url = regsuball(req.url, "//", "/"); # Remove double // in urls
set req.url = std.querysort(req.url); # Normalize the query arguments

# Allow purging
if (req.method == "PURGE") {
if (client.ip ~ purge) {
return(purge);
}else{
return (synth(405, "IP: " + client.ip + " is not allowed to send PURGE requests."));
}
}

# Only cache GET or HEAD requests. This makes sure the POST requests are always passed.
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}

# Not cacheable by default
if (req.http.Authorization) {
return (pass);
}

return (hash);
}

# Called after vcl_recv to create a hash value for the request. This is used as a key
# to look up the object in Varnish.
sub vcl_hash {

set req.url = regsuball(req.url, "draw=[0-9]+&?", ""); # Strip draw
set req.url = regsuball(req.url, "key=[a-z]+&?", ""); # Strip api key
set req.url = regsub(req.url, "(\?&?)$", "");

hash_data(req.url);
hash_data(req.http.Language);
}

# Called after the response headers have been successfully retrieved from the backend.
sub vcl_backend_response {

# Enable ESI
if (bereq.url ~ "^/esi") {
set beresp.ttl = 0m;
} else {
set beresp.do_esi = true;
}

# Don't cache 500s responses etc
if (beresp.status != 200) {
set beresp.ttl = 0s;
}

# Allow stale content, in case the backend goes down.
set beresp.grace = 24h;

return (deliver);
}

# The routine when we deliver the HTTP request to the user
# Last chance to modify headers that are sent to the client
# Called before a cached object is delivered to the client.
sub vcl_deliver {

# Add debug header to see if it a HIT/MISS and the number of hits, disable when not needed
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}

return (deliver);
}

спросил(а) 2019-04-22T22:15:00+03:00 2 года, 6 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема