vcl 4.1;
# =============================================================================
# varnish.vcl — Stack nginx + varnish
# Varnish reçoit le trafic HTTP/1.1 depuis nginx (après terminaison TLS).
# Il proxyfie vers le backend HTTP simple sur 127.0.0.1:8080.
# =============================================================================

backend default {
    .host = "127.0.0.1";
    .port = "8080";
    .probe = {
        .url = "/health";
        .interval = 5s;
        .timeout  = 2s;
        .window   = 3;
        .threshold = 2;
    }
}

sub vcl_recv {
    # Normalisation de l'URL (suppression du double slash)
    if (req.url ~ "//") {
        set req.url = regsuball(req.url, "//+", "/");
    }

    # Transmission des en-têtes de provenance (déjà ajoutés par nginx)
    if (req.http.X-Forwarded-For) {
        set req.http.X-Forwarded-For = req.http.X-Forwarded-For;
    }

    # Ne pas mettre en cache les requêtes POST/PUT/DELETE
    if (req.method != "GET" && req.method != "HEAD") {
        return (pass);
    }

    # Cache les requêtes GET/HEAD
    return (hash);
}

sub vcl_backend_response {
    # TTL de cache court pour les tests (évite les faux positifs)
    set beresp.ttl = 5s;
    set beresp.grace = 10s;
}

sub vcl_deliver {
    # Ajout des en-têtes de debug Varnish (vérifiés par les tests)
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
    # X-Varnish est ajouté automatiquement par Varnish
    set resp.http.Via = "1.1 varnish (Varnish/test)";
    return (deliver);
}
