@@ -54,30 +54,62 @@ Then, optimize Varnish so that it only parses the Response contents when there
5454is at least one ESI tag by checking the ``Surrogate-Control `` header that
5555Symfony adds automatically:
5656
57- ..code -block ::text
57+ ..configuration -block ::
5858
59- sub vcl_fetch {
60- /*
61- Check for ESI acknowledgement
62- and remove Surrogate-Control header
63- */
64- if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
65- unset beresp.http.Surrogate-Control;
59+ ..code-block ::varnish4
6660
67- // For Varnish >= 3.0
68- set beresp.do_esi = true;
69- // For Varnish < 3.0
70- // esi;
61+ /* (https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html#req-not-available-in-vcl-backend-response) */
62+ sub vcl_backend_response {
63+ // Check for ESI acknowledgement and remove Surrogate-Control header
64+ if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
65+ unset beresp.http.Surrogate-Control;
66+ set beresp.do_esi = true;
67+ }
68+ /* By default Varnish ignores Pragma: nocache
69+ (https://www.varnish-cache.org/docs/4.0/users-guide/increasing-your-hitrate.html#cache-control)
70+ so in order avoid caching it has to be done explicitly */
71+ if (beresp.http.Pragma ~ "no-cache") {
72+ // https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html#hit-for-pass-objects-are-created-using-beresp-uncacheable
73+ set beresp.uncacheable = true;
74+ set beresp.ttl = 120s;
75+ return (deliver);
76+ }
7177 }
72- /* By default Varnish ignores Cache-Control: nocache
73- (https://www.varnish-cache.org/docs/3.0/tutorial/increasing_your_hitrate.html#cache-control),
74- so in order avoid caching it has to be done explicitly */
75- if (beresp.http.Pragma ~ "no-cache" ||
76- beresp.http.Cache-Control ~ "no-cache" ||
77- beresp.http.Cache-Control ~ "private") {
78- return (hit_for_pass);
78+
79+ ..code-block ::varnish3
80+
81+ sub vcl_fetch {
82+ // Check for ESI acknowledgement and remove Surrogate-Control header
83+ if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
84+ unset beresp.http.Surrogate-Control;
85+ set beresp.do_esi = true;
86+ }
87+ /* By default Varnish ignores Cache-Control: nocache
88+ (https://www.varnish-cache.org/docs/3.0/tutorial/increasing_your_hitrate.html#cache-control),
89+ so in order avoid caching it has to be done explicitly */
90+ if (beresp.http.Pragma ~ "no-cache" ||
91+ beresp.http.Cache-Control ~ "no-cache" ||
92+ beresp.http.Cache-Control ~ "private") {
93+ return (hit_for_pass);
94+ }
95+ }
96+
97+ ..code-block ::varnish2
98+
99+ sub vcl_fetch {
100+ // Check for ESI acknowledgement and remove Surrogate-Control header
101+ if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
102+ unset beresp.http.Surrogate-Control;
103+ esi;
104+ }
105+ /* By default Varnish ignores Cache-Control: nocache
106+ so in order avoid caching it has to be done explicitly */
107+ if (beresp.http.Pragma ~ "no-cache" ||
108+ beresp.http.Cache-Control ~ "no-cache" ||
109+ beresp.http.Cache-Control ~ "private") {
110+ return (hit_for_pass);
111+ }
79112 }
80- }
81113
82114 ..caution ::
83115