2016-06-06 5 views
1

Kann man Lack-Counter in VCL unter Bedingungen verwenden?Verwendung von Lack-Theken MAIN. * In VCL

Ich möchte eine Bedingung schreiben auf den gegenwärtigen Wert von MAIN.backend_conn aber ich kann nicht herausfinden, ob ich Statistiken in VCL verwenden, auch in Inline C.

Aktuelle Lösung

Jetzt bin ich mit Konfiguration wie folgt aus:

backend default { 
    .host = "192.168.122.11"; 
    .probe = { 
     .url = "/check-connections.php"; 
     .interval = 1s; 
     .threshold = 4; 
    } 
} 

backend sessionWorker { 
    .host = "192.168.122.11"; 
    .probe = { 
     .url = "/other-probe"; 
     .interval = 5s; 
     .threshold = 2; 
    } 
} 

sub vcl_recv { 
    if (req.http.cookie ~ "(^|;\s*)(SESS=)" || std.healthy(req.backend_hint)) { 
     set req.backend_hint = sessionWorker; 
    } else { 
     return (synth(503, "Server overloaded")); 
    } 
} 

Check-connections.php liest nginx Status - aktive Verbindungen und löst einen Fehler, wenn es mehr aktive Verbindungen:

if ($active > 10) { 
    http_response_code(502); 
} else { 
    http_response_code(200); 
} 

Ich würde gerne eine Lösung finden, wie man std.healty (req.backend_hint) durch aktuelle Verbindungen (VBE.conn) zum Backend direkt in der VCL ersetzen kann.

Antwort

0

Es sind bereits einige Zähler implementiert. Wie bereq.retries:

sub vcl_backend_response { 
    if (beresp.status == 503 && bereq.retries < 5) { 
    return(retry); 
    } 
} 

sub vcl_backend_error { 
    if (beresp.status == 503 && bereq.retries == 5) { 
    synthetic(std.fileread("/path/to/my/file/varnish503.html")); 
    return(deliver); 
    } 
} 

Vielleicht ist das schon, was Sie brauchen. Ansonsten ist here eine Liste anderer Build-in-Counter.

+0

bereq.retries ist nicht das, was ich suche. Ich weiß, dass es nur wenige [Variablen in VCL] gibt (https://www.varnish-cache.org/docs/trunk/reference/vcl.html#variables), aber ich möchte [VBE.conn] (https://www.varnish-cache.org/docs/trunk/reference/varnish-counters.html#per-backend-counters-vbe) aus der Liste der verfügbaren Zähler. Aber ich weiß nicht, wie man mit diesen Zählern in VCL arbeitet. – adrive