+ set bereq.http.upgrade = req.http.upgrade;
+ set bereq.http.connection = req.http.connection;
+ }
+}
+
+sub vcl_hash {
+ # CHUNKED SUPPORT
+ if (req.http.x-range ~ "bytes=") {
+ hash_data(req.http.x-range);
+ unset req.http.Range;
+ }
+}
+
+sub vcl_backend_fetch {
+ # Be more lenient for slow servers on the fediverse
+ if bereq.url ~ "^/proxy/" {
+ set bereq.first_byte_timeout = 300s;
+ }
+
+ # CHUNKED SUPPORT
+ if (bereq.http.x-range) {
+ set bereq.http.Range = bereq.http.x-range;
+ }
+
+ if (bereq.retries == 0) {
+ # Clean up the X-Varnish-Backend-503 flag that is used internally
+ # to mark broken backend responses that should be retried.
+ unset bereq.http.X-Varnish-Backend-503;
+ } else {
+ if (bereq.http.X-Varnish-Backend-503) {
+ if (bereq.method != "POST" &&
+ std.healthy(bereq.backend) &&
+ bereq.retries <= 4) {
+ # Flush broken backend response flag & try again.
+ unset bereq.http.X-Varnish-Backend-503;
+ } else {
+ return (abandon);
+ }
+ }