2017-04-06 1 views
0

Ich benutze Lack 4, php-fpm 7, nginx, CentOS 7Varnish 4 ESI: bereq.url nicht url innerhalb ESI src-Tag lesen

Mein varnish.params:

DAEMON_OPTS="-a :80 -T 127.0.0.1:6082 
      -f /etc/varnish/default.vcl 
      -S /etc/varnish/secret 
      -s malloc,1g 
      -p feature=+esi_disable_xml_check,+esi_ignore_other_elements 
      -p cli_buffer=16384 
      -p vcc_allow_inline_c=on" 

Meine default.vcl:

if (bereq.url ~ "^.*(\/**esi**\/)+.*$") { 
    set beresp.do_esi = true; 
    set beresp.ttl = 0s; 
} else { 
    set beresp.ttl = 3600s; 
} 

Mein Problem ist, wenn ich, dass vcl Code zu benutzen, die durch den Zugriff auf sagen, dass es ausgelöst wird: http://localhost/lab/varnish

Welche machen:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
</head> 
<body> 
    <esi:include src="http://localhost/lab/esi/body"/> 
</body> 
</html> 

Varnish ist nicht die URL src in dem ESI-Tag zu lesen, so dass es nur einen leeren Körper zu machen.

Aber wenn ich diesen Code verwenden:

if (bereq.url ~ "^.*(\/**lab**\/)+.*$") { 
    set beresp.do_esi = true; 
    set beresp.ttl = 0s; 
} else { 
    set beresp.ttl = 3600s; 
} 

Varnish erfolgreich den Inhalt innerhalb ESI-Tag machen, die hergestellt wird durch: http://localhost/lab/esi/body

Wie Varnish machen auslösen machen das ESI-Fragment basierend auf Erkennen, was in ESI "src" -Tag ist?

Ich habe versucht, Surrogate-Capability und Überprüfung mit Surrogate-Control, es funktioniert auch nicht, für mich. Ich habe keine Ahnung mehr ..

Antwort

0

Ich glaube nicht, dass Sie können.

Wenn Sie beresp.do_esi auf true setzen, analysiert Varnish die Back-End-Antwort und ersetzt jedes esi: include-Tag durch seinen Quellinhalt.

Wenn Sie nicht Varnish nicht parse das Beresp und dienen es dem Kunden wie es ist.

Übrigens, warum möchten Sie esi-Tags teilweise ersetzen?

+0

Ich möchte Lack den bereits zwischengespeicherten Inhalt verwenden, um dem Client zu dienen, und Inhalt von der Quelle innerhalb des ESI-Tags ausschließen (Anforderung an Back-End). Kann es getan werden? –