Varnish Cache: переписать URL-адрес включения ESI, если сеанс активен

Я хочу переписать URL-адрес включения ESI в Varnish.

В моем шаблоне у меня есть:

<esi:include src="/esi/user.html" />

который включает только статический контент, например «Добро пожаловать, гость».

Если они входят в систему, я добавляю сеанс в свой .vcl.

Что я хочу сделать, так это переписать включение в:

<esi:include src="/esi/user.active.html" /> 

где я буду делать запрос БД.

В настоящее время в моем подразделе vcl_recv у меня есть:

if (req.http.Cookie) {
        if (req.url ~ "^/esi/(.*)\.html") { 
        set req.url = regsub("^/esi/(.*)\.html", "$0", ".active"); 
        }
}

Это вызывает ошибку 503 на внешнем интерфейсе. Как мне обновить это, чтобы переписать URL-адрес и заставить его работать?


person Ian Jamieson    schedule 26.08.2014    source источник


Ответы (1)


Хорошо, сработало. Вот мой файл .VCL, если кому интересно

backend default {
.host = "127.0.0.1";
.port = "8080";
}

sub vcl_recv {

 if (req.request != "GET" &&
        req.request != "HEAD" &&
        req.request != "PUT" &&
        req.request != "POST" &&
        req.request != "TRACE" &&
        req.request != "OPTIONS" &&
        req.request != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }

# Remove cookie for static files
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|woff|ttf|eot|svg)(\?[a-zA-Z0-9\=\.\-]+)?$") {
    remove req.http.cookie;
}

# Quick hack for now to clear the cache on post
if (req.request == "POST") {
    ban("req.http.host == "+ req.http.Host);
    return(pass);
}

# If CraftSessionId isn't active, remove cookies altogether
if (req.http.Cookie) {
    set req.http.Cookie = ";" + req.http.Cookie;
    set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
    set req.http.Cookie = regsuball(req.http.Cookie, ";(CraftSessionId)=", "; \1=");
    set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
    set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");

    if (req.http.Cookie == "") {
        remove req.http.Cookie;
    }
}


# If user is logged in/has cookies enabled, rewrite esi files to include *.active.html
if (req.http.cookie ~ "CraftSessionId=") {
    if (req.url ~ "^/esi") {
        set req.url = regsub(req.url, "^/esi/(.*).html", "/esi/\1-active.html");
    }
}

# Grace period for falldown
set req.grace = 1h;
}

sub vcl_fetch {

set beresp.ttl = 24h; # Make cache last 24 hours

#  Allow cookies in admin and account areas
    if (req.url !~ "(admin/login|account/login|account/register)") {
        unset beresp.http.set-cookie;
    }

set beresp.do_gzip = true;
set beresp.do_esi = true; # Allow ESI

# Grace period for falldown
set beresp.grace = 1h;

}
person Ian Jamieson    schedule 30.08.2014