nexcess / magento-turpentine

A Varnish extension for Magento.
GNU General Public License v2.0
520 stars 252 forks source link

Infinite copies of site until browser runs out of memory #1417

Open stefols opened 7 years ago

stefols commented 7 years ago

Hi.

I'm new to varnish and turpentine.

I get a wierd infinite loop problem where the form key element value is the html of the full site, wich contains a formkey with the full site, wich contains a formkey with.... you get the idea....

I've managed to get the site to run - sort of - through varnish (without caching - just slapped on varnish headers). But when I applied the turpentine vcl from magento cache admin, that's when this problem occurs. If I restart varnish (with default.vcl) the site runs (without caching).

I have no clue what's wrong so I'll provide evertything I've got.

I'm using: Magento 1.9.2.4 Varnish 4.1.6 Turpentine 0.7.10 [Edit: I have now upgraded to 0.7.2 and no result] Everything runs on the same Apache/2.2.22 (Debian) server

I've edited the app/code/community/Nexcessnet/Turpentine/Helper/Esi.php:330

    public function buildEsiIncludeFragment($url) {
        return sprintf('<esi:include src=\'%s\' />', $url);
    }

The magento admin config for turpentine is:

Varnish Options

Apply VCL On Config Change : active Strip whitespace from VCL files : allways Use VCL fix : active Fix HTTPS redirect : inactive Enable Debug Info : active Enable Varnish Command Logging : active Enable Block Logging : active Enable AJAX Flash Messages : active Fix Product List Toolbar : active Enable Site Crawler : active Enable Crawler Debug : active Crawler Batch Size : 1000 Crawler Batch Wait : 0

Use custom log file : active Custom log file name : turpentine.log

Varnish Version : 4.0.x [Edit: changed to 4.1.x with no result] Server List : localhost:92 Varnish Authentication Key : [the one from etc/varnish/secret] Config File Location : {{root_dir}}/var/default.vcl Custom VCL File - Top : {{root_dir}}/app/code/community/Nexcessnet/Turpentine/misc/custom_include_top.vcl Custom VCL File - Bottom : {{root_dir}}/app/code/community/Nexcessnet/Turpentine/misc/custom_include.vcl Custom VCL Template :

Caching Options

Load Balancing : No, use only one backend Backend Host : 127.0.0.1 Backend Port : 91 Frontend Timeout : 300 Admin Timeout : 21600 Crawler IP Addresses : 127.0.0.1 Crawler User Agents : ApacheBench/.,.Googlebot.,JoeDog/.,.Siege/.,magespeedtest.com,Nexcessnet_Turpentine/.,.PTST.*

Normalize Encoding : active Normalize User-Agent : inactive Normalize Host : active Normalized Host Target : Normalize Cookie Regex:
Normalized Cookie Target:

Grace Period (seconds) : 15 Default Page TTL (seconds) : 3600 URL-based TTLs : Static File TTL (seconds) : 28800

URL Blacklist : cron.php Bypass Varnish if base URL is not found within a store? : inactive

GET Parameters : __SID,XDEBUG_PROFILE Ignore GET Parameters : utm_source,utm_medium,utm_campaign,utm_content,utm_term,gclid,cx,ie,cof,siteurl Transfer unmodified URL to Backend Server : yes

Force Static Asset Caching : active Static Asset Extensions : css,js,jpe?g,png,gif,ico,swf Use Simple Hash : active

Enable Maintenance Mode : inactive Custom HTML content of vcl synth (error) sub:

hosts:

<VirtualHost *:91> 
        ServerAdmin webmaster@localhost
        DocumentRoot /[site folder path]/
        AddDefaultCharset ISO-8859-1
        LanguagePriority
        DefaultLanguage ISO-8859-1
</VirtualHost>

<VirtualHost *:80> 
        ServerName [server name]
        ServerAdmin webmaster@localhost

        ProxyPreserveHost On
        ProxyPass "/" "http://localhost:8081/"

        AddDefaultCharset ISO-8859-1
        LanguagePriority
        DefaultLanguage ISO-8859-1
</VirtualHost>

<VirtualHost *:443> 
        ServerName [server name]

        ProxyPreserveHost On
        RequestHeader set X-Forwarded-Port "443"
        RequestHeader set X-Forwarded-Proto "https"
        ProxyPass "/" http://localhost:8081/
        ProxyPassReverse "/" http://localhost:8081/

        SSLEngine on
        SSLCertificateFile /[cerificate path]
        ServerAdmin webmaster@localhost

        DocumentRoot /[site folder path]
        DirectoryIndex index.php index.html
        <Directory "/[site folder path]/">
            AllowOverride All
            Options -Indexes +FollowSymlinks
            Require all granted
        </Directory>

</VirtualHost>

etc/default/varnish

START=yes
NFILES=131072
MEMLOCK=82000

DAEMON_OPTS="-a :8081 \
             -T localhost:92 \
             -f /etc/varnish/default.vcl \
             -p cli_buffer=25000 \
             -p vcc_allow_inline_c=on \
             -p feature=+esi_ignore_other_elements
             -p http_resp_hdr_len=64000 \
             -p feature=+esi_disable_xml_check
             -p thread_pool_add_delay=2 \
             -p thread_pools=4 \
             -p thread_pool_min=200 \
             -p thread_pool_max=4000 \
             -S /etc/varnish/secret \
             -s malloc,1024m"

etc/varnish/default.vcl

vcl 4.0;
import std;
backend default {
    .host = "127.0.0.1";
    .port = "91";
}

sub vcl_recv {
        if((req.http.host ~"^(?i)[server name]") && req.http.X-Forwarded-Proto !~ "(?i)https"){
                return (synth(750, ""));
        }
}

sub vcl_synth {
        if(resp.status == 750){
                set resp.status = 301;
                set resp.http.Location = "https://[site name]" + req.url;
                return(deliver);
        }
}

sub vcl_backend_response {
        if(beresp.ttl < 120s){
                set beresp.ttl = 120s;
        }
}

sub vcl_deliver {
}

Turpentine generated vcl from magento admin:

vcl 4.0;
C{
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <pthread.h>
static pthread_mutex_t lrand_mutex = PTHREAD_MUTEX_INITIALIZER;
void generate_uuid(char* buf) {
pthread_mutex_lock(&lrand_mutex);
long a = lrand48();
long b = lrand48();
long c = lrand48();
long d = lrand48();
pthread_mutex_unlock(&lrand_mutex);
sprintf(buf, "frontend=%08lx%04lx%04lx%04lx%04lx%08lx",
a,
b & 0xffff,
(b & ((long)0x0fff0000) >> 16) | 0x4000,
(c & 0x0fff) | 0x8000,
(c & (long)0xffff0000) >> 16,
d
);
return;
}
}C
import std;
import directors;
backend default {
.host = "127.0.0.1";
.port = "91";
.first_byte_timeout = 300s;
.between_bytes_timeout = 300s;
}
backend admin {
.host = "127.0.0.1";
.port = "91";
.first_byte_timeout = 21600s;
.between_bytes_timeout = 21600s;
}
acl crawler_acl {
"127.0.0.1";
}
acl debug_acl {
}
/* -- REMOVED
sub generate_session {
if (req.url ~ ".*[&?]SID=([^&]+).*") {
set req.http.X-Varnish-Faked-Session = regsub(
req.url, ".*[&?]SID=([^&]+).*", "frontend=\1");
} else {
C{
char uuid_buf [50];
generate_uuid(uuid_buf);
static const struct gethdr_s VGC_HDR_REQ_VARNISH_FAKED_SESSION =
{ HDR_REQ, "\030X-Varnish-Faked-Session:"};
VRT_SetHdr(ctx,
&VGC_HDR_REQ_VARNISH_FAKED_SESSION,
uuid_buf,
vrt_magic_string_end
);
}C
}
if (req.http.Cookie) {
std.collect(req.http.Cookie);
set req.http.Cookie = req.http.X-Varnish-Faked-Session +
"; " + req.http.Cookie;
} else {
set req.http.Cookie = req.http.X-Varnish-Faked-Session;
}
}
sub generate_session_expires {
C{
time_t now = time(NULL);
struct tm now_tm = *gmtime(&now);
now_tm.tm_sec += 3600;
mktime(&now_tm);
char date_buf [50];
strftime(date_buf, sizeof(date_buf)-1, "%a, %d-%b-%Y %H:%M:%S %Z", &now_tm);
static const struct gethdr_s VGC_HDR_RESP_COOKIE_EXPIRES =
{ HDR_RESP, "\031X-Varnish-Cookie-Expires:"};
VRT_SetHdr(ctx,
&VGC_HDR_RESP_COOKIE_EXPIRES,
date_buf,
vrt_magic_string_end
);
}C
}
-- */
sub vcl_init {
}
sub vcl_recv {
if (req.restarts == 0) {
if (req.http.X-Forwarded-For) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (!true || req.http.Authorization ||
req.method !~ "^(GET|HEAD|OPTIONS)$" ||
req.http.Cookie ~ "varnish_bypass=1") {
return (pass);
}
if(true) {
set req.http.X-Varnish-Origin-Url = req.url;
}
set req.url = regsuball(req.url, "(.*)//+(.*)", "\1/\2");
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "\*|gzip") {
set req.http.Accept-Encoding = "gzip";
} else if (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
unset req.http.Accept-Encoding;
}
}
set req.http.Host = "[site name]";
if (req.url ~ "^(/media/|/skin/|/js/|/)(?:(?:index|litespeed)\.php/)?") {
set req.http.X-Turpentine-Secret-Handshake = "1";
if (req.url ~ "^(/media/|/skin/|/js/|/)(?:(?:index|litespeed)\.php/)?admin") {
set req.backend_hint = admin;
return (pipe);
} else {
}
if (req.http.Cookie ~ "\bcurrency=") {
set req.http.X-Varnish-Currency = regsub(
req.http.Cookie, ".*\bcurrency=([^;]*).*", "\1");
}
if (req.http.Cookie ~ "\bstore=") {
set req.http.X-Varnish-Store = regsub(
req.http.Cookie, ".*\bstore=([^;]*).*", "\1");
}
if (req.url ~ "/turpentine/esi/get(?:Block|FormKey)/") {
set req.http.X-Varnish-Esi-Method = regsub(
req.url, ".*/method/(\w+)/.*", "\1");
set req.http.X-Varnish-Esi-Access = regsub(
req.url, ".*/access/(\w+)/.*", "\1");
if (req.http.X-Varnish-Esi-Method == "esi" && req.esi_level == 0 &&
!(true || client.ip ~ debug_acl)) {
return (synth(403, "External ESI requests are not allowed"));
}
}
if (req.http.Cookie !~ "frontend=" && !req.http.X-Varnish-Esi-Method) {
if (client.ip ~ crawler_acl ||
req.http.User-Agent ~ "^(?:ApacheBench/.*|.*Googlebot.*|JoeDog/.*|.*Siege/.*|magespeedtest\.com|Nexcessnet_Turpentine/.*|.*PTST.*)$") {
set req.http.Cookie = "frontend=crawler-session";
} else {
return (pipe);
}
}
if (true &&
req.url ~ ".*\.(?:css|js|jpe?g|png|gif|ico|swf)(?=\?|&|$)") {
unset req.http.Cookie;
unset req.http.X-Varnish-Faked-Session;
set req.http.X-Varnish-Static = 1;
return (hash);
}
if (req.url ~ "^(/media/|/skin/|/js/|/)(?:(?:index|litespeed)\.php/)?(?:admin|api|cron\.php)" ||
req.url ~ "\?.*__from_store=") {
return (pipe);
}
if (true &&
req.url ~ "(?:[?&](?:__SID|XDEBUG_PROFILE)(?=[&=]|$))") {
return (pass);
}
if (req.url ~ "[?&](utm_source|utm_medium|utm_campaign|gclid|cx|ie|cof|siteurl)=") {
set req.url = regsuball(req.url, "(?:(\?)?|&)(?:utm_source|utm_medium|utm_campaign|gclid|cx|ie|cof|siteurl)=[^&]+", "\1");
set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
}
if (true && req.url ~ "[?&](utm_source|utm_medium|utm_campaign|utm_content|utm_term|gclid|cx|ie|cof|siteurl)=") {
set req.url = regsuball(req.url, "(?:(\?)?|&)(?:utm_source|utm_medium|utm_campaign|utm_content|utm_term|gclid|cx|ie|cof|siteurl)=[^&]+", "\1");
set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
}
if(true) {
set req.http.X-Varnish-Cache-Url = req.url;
set req.url = req.http.X-Varnish-Origin-Url;
unset req.http.X-Varnish-Origin-Url;
}
return (hash);
}
}
sub vcl_pipe {
unset bereq.http.X-Turpentine-Secret-Handshake;
set bereq.http.Connection = "close";
}
sub vcl_hash {
std.log("vcl_hash start");
if (true && req.http.X-Varnish-Static) {
std.log("hash_data static file - req.url: " + req.url);
hash_data(req.url);
if (req.http.Accept-Encoding) {
std.log("hash_data static file - Accept-Encoding: " + req.http.Accept-Encoding);
hash_data(req.http.Accept-Encoding);
}
std.log("vcl_hash end return lookup");
return (lookup);
}
if(true && req.http.X-Varnish-Cache-Url) {
hash_data(req.http.X-Varnish-Cache-Url);
std.log("hash_data - X-Varnish-Cache-Url: " + req.http.X-Varnish-Cache-Url);
} else {
hash_data(req.url);
std.log("hash_data - req.url: " + req.url );
}
if (req.http.Host) {
hash_data(req.http.Host);
std.log("hash_data - req.http.Host: " + req.http.Host);
} else {
hash_data(server.ip);
}
std.log("hash_data - req.http.Ssl-Offloaded: " + req.http.Ssl-Offloaded);
hash_data(req.http.Ssl-Offloaded);
if (req.http.X-Normalized-User-Agent) {
hash_data(req.http.X-Normalized-User-Agent);
std.log("hash_data - req.http.X-Normalized-User-Agent: " + req.http.X-Normalized-User-Agent);
}
if (req.http.Accept-Encoding) {
hash_data(req.http.Accept-Encoding);
std.log("hash_data - req.http.Accept-Encoding: " + req.http.Accept-Encoding);
}
if (req.http.X-Varnish-Store || req.http.X-Varnish-Currency) {
hash_data("s=" + req.http.X-Varnish-Store + "&c=" + req.http.X-Varnish-Currency);
std.log("hash_data - Store and Currency: " + "s=" + req.http.X-Varnish-Store + "&c=" + req.http.X-Varnish-Currency);
}
if (req.http.X-Varnish-Esi-Access == "private" &&
req.http.Cookie ~ "frontend=") {
std.log("hash_data - frontned cookie: " + regsub(req.http.Cookie, "^.*?frontend=([^;]*);*.*$", "\1"));
hash_data(regsub(req.http.Cookie, "^.*?frontend=([^;]*);*.*$", "\1"));
}
if (req.http.X-Varnish-Esi-Access == "customer_group" &&
req.http.Cookie ~ "customer_group=") {
hash_data(regsub(req.http.Cookie, "^.*?customer_group=([^;]*);*.*$", "\1"));
}
std.log("vcl_hash end return lookup");
return (lookup);
}
sub vcl_hit {
}
sub vcl_backend_response {
set beresp.grace = 15s;
set beresp.http.X-Varnish-Host = bereq.http.host;
set beresp.http.X-Varnish-URL = bereq.url;
if (bereq.url ~ "^(/media/|/skin/|/js/|/)(?:(?:index|litespeed)\.php/)?") {
unset beresp.http.Vary;
set beresp.do_gzip = true;
if (beresp.status != 200 && beresp.status != 404) {
set beresp.ttl = 15s;
set beresp.uncacheable = true;
return (deliver);
} else {
if (beresp.http.Set-Cookie) {
set beresp.http.X-Varnish-Set-Cookie = beresp.http.Set-Cookie;
unset beresp.http.Set-Cookie;
}
unset beresp.http.Cache-Control;
unset beresp.http.Expires;
unset beresp.http.Pragma;
unset beresp.http.Cache;
unset beresp.http.Age;
if (beresp.http.X-Turpentine-Esi == "1") {
set beresp.do_esi = true;
}
if (beresp.http.X-Turpentine-Cache == "0") {
set beresp.ttl = 15s;
set beresp.uncacheable = true;
return (deliver);
} else {
if (true &&
bereq.url ~ ".*\.(?:css|js|jpe?g|png|gif|ico|swf)(?=\?|&|$)") {
set beresp.ttl = 28800s;
set beresp.http.Cache-Control = "max-age=28800";
} elseif (bereq.http.X-Varnish-Esi-Method) {
if (bereq.http.X-Varnish-Esi-Access == "private" &&
bereq.http.Cookie ~ "frontend=") {
set beresp.http.X-Varnish-Session = regsub(bereq.http.Cookie,
"^.*?frontend=([^;]*);*.*$", "\1");
}
if (bereq.http.X-Varnish-Esi-Method == "ajax" &&
bereq.http.X-Varnish-Esi-Access == "public") {
set beresp.http.Cache-Control = "max-age=" + regsub(
bereq.url, ".*/ttl/(\d+)/.*", "\1");
}
set beresp.ttl = std.duration(
regsub(
bereq.url, ".*/ttl/(\d+)/.*", "\1s"),
300s);
if (beresp.ttl == 0s) {
set beresp.ttl = 15s;
set beresp.uncacheable = true;
return (deliver);
}
} else {
set beresp.ttl = 3600s;
}
}
}
return (deliver);
}
}
sub vcl_deliver {
if (req.http.X-Varnish-Faked-Session) {
set resp.http.Set-Cookie = req.http.X-Varnish-Faked-Session +
"; expires=" + resp.http.X-Varnish-Cookie-Expires + "; path=/";
if (req.http.Host) {
if (req.http.User-Agent ~ "^(?:ApacheBench/.*|.*Googlebot.*|JoeDog/.*|.*Siege/.*|magespeedtest\.com|Nexcessnet_Turpentine/.*|.*PTST.*)$") {
set resp.http.Set-Cookie = resp.http.Set-Cookie +
"; domain=" + regsub(req.http.Host, ":\d+$", "");
} else {
if (req.http.Host ~ "" && "" ~ "..") {
set resp.http.Set-Cookie = resp.http.Set-Cookie +
"; domain=";
} else {
set resp.http.Set-Cookie = resp.http.Set-Cookie +
"; domain=" + regsub(req.http.Host, ":\d+$", "");
}
}
}
set resp.http.Set-Cookie = resp.http.Set-Cookie + "; httponly";
unset resp.http.X-Varnish-Cookie-Expires;
}
if (req.http.X-Varnish-Esi-Method == "ajax" && req.http.X-Varnish-Esi-Access == "private") {
set resp.http.Cache-Control = "no-cache";
}
if (true || client.ip ~ debug_acl) {
set resp.http.X-Varnish-Hits = obj.hits;
set resp.http.X-Varnish-Esi-Method = req.http.X-Varnish-Esi-Method;
set resp.http.X-Varnish-Esi-Access = req.http.X-Varnish-Esi-Access;
set resp.http.X-Varnish-Currency = req.http.X-Varnish-Currency;
set resp.http.X-Varnish-Store = req.http.X-Varnish-Store;
} else {
unset resp.http.X-Varnish;
unset resp.http.Via;
unset resp.http.X-Powered-By;
unset resp.http.Server;
unset resp.http.X-Turpentine-Cache;
unset resp.http.X-Turpentine-Esi;
unset resp.http.X-Turpentine-Flush-Events;
unset resp.http.X-Turpentine-Block;
unset resp.http.X-Varnish-Session;
unset resp.http.X-Varnish-Host;
unset resp.http.X-Varnish-URL;
unset resp.http.X-Varnish-Set-Cookie;
}
}
stefols commented 7 years ago

Could this be something?

2017-05-26T13:17:26+00:00 INFO (6): TURPENTINE: Checking ESI block candidate: formkey 2017-05-26T13:17:26+00:00 INFO (6): TURPENTINE: -- block testing: shouldResponseUseEsi = 2017-05-26T13:17:26+00:00 INFO (6): TURPENTINE: -- block testing: instanceof Mage_Core_Block_Template = 1 2017-05-26T13:17:26+00:00 INFO (6): TURPENTINE: -- block testing: Esi Options =

Is it slapping a template on the form key?

miguelbalparda commented 7 years ago

That is weird since it is the first time I see this error, my first impression is that this might be related to your theme structure. Why did you edited the file you mentioned?

stefols commented 7 years ago

It was a fix for a similar issue (but not the same) that I found here somewhere.

stefols commented 7 years ago

This is the one that I got the edit-part from:

965

I'm goint to check with a clean install of magento today to see if it's my templates that is messing up the form-key.

stefols commented 7 years ago

update: varnish seems to cache magento connect "properly". I can't log in since it caches the login page, and the login page has a form_key.

Accept-Ranges:bytes Age:195 Connection:Keep-Alive Content-Encoding:gzip Content-Language:ISO-8859-1 Content-Length:1070 Content-Type:text/html; charset=UTF-8 Date:Mon, 29 May 2017 07:35:35 GMT Keep-Alive:timeout=5, max=95 Server:Apache/2.2.22 (Debian) Vary:Accept-Encoding Via:1.1 varnish-v4 X-Frame-Options:SAMEORIGIN X-Powered-By:PHP/5.4.45-0+deb7u8 X-Varnish:1647766 1310844 X-Varnish-Currency: X-Varnish-Esi-Access: X-Varnish-Esi-Method: X-Varnish-Hits:3 X-Varnish-Host:[server name] X-Varnish-Set-Cookie:PHPSESSID=f61llqccg6rdrsagjbm6g36n12; expires=Mon, 29-May-2017 08:35:35 GMT; path=/downloader; domain=[server name]; HttpOnly X-Varnish-Store: X-Varnish-URL:/downloader/index.php?A=

stefols commented 7 years ago

Update:

I've installed a fresh and clean magento demo site and this is the result:

image

There are no customizations to magento, no extensions (except turpentine) and no custom templates.

The demo site works fine when the hosts config bypass varnish, the site works fine (without cache) when I run it through varnish (X-Varnish: turns up in header) before installing turpentine. As soon as I setup turpentine and hit "Apply Varnish Config" it freaks out.

Please get back with at least some pointers on where to start looking...

stefols commented 7 years ago

it looks like it's not the form_key this time, even though it's the same result.

Here's where it goes wrong on the demo site:

    <div class="global-site-notice demo-notice">
        <div class="notice-inner"><p>This is a demo store. Any orders placed through this store will not be honored or fulfilled.</p></div>
    </div>
    <div class="page">
        <!-- ESI START [header] -->
<!-- ESI URL: //[the server]/turpentine/esi/getBlock/method/esi/access/private/ttl/3600/hmac/d9fd2361ad0d0c53af231f37c4effc6574691cd1d1badfe8597442005ca37b9c/data/HLBnmot0p9VROhjMUWr19O9-LSUrFlFmSuFItNFkMJff8b4SLTUb10coNtf_JLRI9MEkXfhuCBPwtRt_q6G2JYbRcmL0b90ln4-yyNWbJ3N0hu_E2oE-8aD3QiOfWhKrQiWl5gwWz1z0WUcFU_77wiPnRZTp45ZU840QO9QUbRIev6_CvR1sTGv681xrQe36eJGjaewqteKB1q2vP2oRM1oValB2KoKp5nbqoX34an3m4_Np9tyy3DxIbMDjsybPIA-potd3aB32SJ3VXOGk8wCZlbzD1zJU-tnTmx-MjHkhudWulUMjtuqrrQwB--oYUYiwatF1bdHfd_PoyxfvGKKihtgSnMsjJJMjNs2lYMnO-e_wrtapeO5RfEnME_1akwXyj3TX9FX8fgirrHWblX4gl2t10Z0LDbLiGTsfTZ9iL3mnkjKrmlTGFeM0NmzrjjRRDhOtSfjMkwOZoYs2R4Az9yG2VkXOOqYUCpFF25hXCKlqoGFctHmZ9CCFPmTBCLm_RTjswj-b3cB6oJPMyQ==/ -->

<!--[if lt IE 7 ]> <html lang="en" id="top" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" id="top" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" id="top" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" id="top" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->  <!--<![endif]-->

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>404 Not Found</title>
<meta name="description" content="Page description">
<meta name="keywords" content="Page keywords">
<meta name="robots" content="INDEX,FOLLOW">

at the start of the "page" div it inserts some ESI code and then sends in the full page (meta data, new set of js/css references etc.).

And this is the < html > tag: < html lang="en" id="top" class=" js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage js no-touch localstorage">

stefols commented 7 years ago

I get a number of these in the log: 2017-06-01T08:19:26+00:00 WARN (4): TURPENTINE: ESI url is probably too long (2911 > 2047 characters): //[server]/turpentine/esi/getBlock/method/esi/access/private/ttl/3600/hmac/3dfc3e6b98b64ee44affcc55cb2e819efa660525dbf2b8f5f6ddcb3a08f83c50/data/HLBnmot0p9UTF0mM-rFxfUc4Jplw7sPoZ9X29i4mJRBPTMYB2FSqnodw5mmTUehuNabtqKQ5kBRRt-b2d-KxbnMC3p6J6LBYVfbfCQBavWN5UcWc5FVPRESwuBW3lDw3gC-o_ls6ZtbdjpPE_tQ0h9hN9TvX9JGax30UXOvnBFmMlBjnyIidnkDXLbQWoKfQ6EPemier8WFt45e_s0Rsc9yRoD35YnX36b2tmQBJe6LozpJuwAhEBGcZXRZSFlYct6okcUr9ML0w2_VMCsPKLG25nc15J-s6w3W9jXQ8Yy_42XHKaZMTIGEnitYpyeojwV2n7ifh2GbGh8C92tR_copYaNImKDWqS7q0MDF3Qs8tzj91y5NjJrsFUU3E7UeYY9XS58sXsA4CjgVLf-qanLfyBf8PpsnKa-XOnyQKQIcMxJFuCu-Yp-cIvW0PK5nO9Z1y7YljibXGmFNbLOadKYT4BEAYQLckvGpUAu7UWujlldDPvfEKZQ-q3wM4UtJAX2wKG2POwKQ=/?2356a96f53229512734d68e5e04b2045b564990b2068ef4963a3b640acb2b890=data&3dfc3e6b98b64ee44affcc55cb2e819efa660525dbf2b8f5f6ddcb3a08f83c50=data&HLBnmot0p9UTF0mM-rFxfUc4Jplw7sPoZ9X29i4mJRBPTMYB2FSqnodw5mmTUehuNabtqKQ5kBRRt-b2d-KxbnMC3p6J6LBYVfbfCQBavWN5UcWc5FVPRESwuBW3lDw3gC-o_ls6ZtbdjpPE_tQ0h9hN9TvX9JGax30UXOvnBFmMlBjnyIidnkDXLbQWoKfQ6EPemier8WFt45e_s0Rsc9yRoD35YnX36b2tmQBJe6LozpJuwAhEBGcZXRZSFlYct6okcUr9ML0w2_VMCsPKLG25nc15J-s6w3W9jXQ8Yy_42XHKaZMTIGEnitYpyeojwV2n7ifh2GbGh8C92tR_copYaNImKDWqS7q0MDF3Qs8tzj91y5NjJrsFUU3E7UeYY9XS58sXsA4CjgVLf-qanLfyBf8PpsnKa-XOnyQKQIcMxJFuCu-Yp-cIvW0PK5nO9Z1y7YljibXGmFNbLOadKYT4BEAYQLckvGpUAu7UWujlldDPvfEKZQ-q3wM4UtJAX2wKG2POwKQ%3D=&HLBnmot0p9VROhjMUWr19O9-LSUrFlFmSuFItNFkMJff8b4SLTUb10coNtf_JLRI9MEkXfhuCBPwtRt_q6G2JYbRcmL0b90ln4-yyNWbJ3N0hu_E2oE-8aD3QiOfWhKrQiWl5gwWz1z0WUcFU_77wiPnRZTp45ZU840QO9QUbRIev6_CvR1sTGv681xrQe36eJGjaewqteKB1q2vP2oRM1oValB2KoKp5nbqoX34an3m4_Np9tyy3DxIbMDjsybPIA-potd3aB32SJ3VXOGk8wCZlbzD1zJU-tnTmx-MjHkhudWulUMjtuqrrQwB--oYUYiwatF1bdHfd_PoyxfvGKKihtgSnMsjJJMjNs2lYMnO-e_wrtapeO5RfEnME_1akwXyj3TX9FX8fgirrHWblX4gl2t10Z0LDbLiGTsfTZ9iL3mnkjKrmlTGFeM0NmzrjjRRDhOtSfjMkwOZoYs2R4Az9yG2VkXOOqYUCpFF25hXCKlqoGFctHmZ9CCFPmTBCLm_RTjswj-b3cB6oJPMyQ%3D%3D=&MU09p2UP1DdQYhOFgko20SSzj29KLctDp-dmQ6XMtDVqhXZ53jGaEB3hT5UzMYXyOqlmO3HIkKzg6vLOxhLW7t3CKo41D8uEe23B9vtMnLBAjnCogv6UwTEaOpACjs1EPP30keB-WIu7OrfCaALiLfSHaG4c8x58S4evKwPLB0us-FAnELMDoE-FpCFsB2sq2mtyHWTLvrJf-eSNlgy44vgVAJNkPvL9NTH3pzmJ_kBkvJ6xrtj8B3H7manIQWhZXPHp0YQDlGXCuzcwQg0oDGT0G1BrBt_WQPwdc_Q5uehpIhj8GKX1kjy8Ax5OlUUnXl_Z08nS257YO1g3oSFZYgC4r20LNUPiedJZm5Ul8NNNPyRH62lQOKwPmUenZfq2hzbRoAZlWVTWWSyeyFwuNg%3D%3D=&ae32737d6eee42cedf5315b8c558157dcf86ce3bbcfb7deb636f496b5b80c9a4=data&d9fd2361ad0d0c53af231f37c4effc6574691cd1d1badfe8597442005ca37b9c=data&eNJSrrOtSskWncLRjdLUr-8NtTHlYQbBUMWXnqIuPVLThyr1J9C3L08i-zxOKIlRsUNwizxi2glWYIglbqMSq2aI8n6E9TCRr1H63GMNaDuLgVzWsNp25DsmTJtCZS1gAsUepTWkv4FiQoGPuM7BhWYKsXpO6COv11o38M_rInPg6ZnrUoNzMdj3HPPp4d-hWrK9Xt2TrpfzpiizpyDpUw4zOy95O9vOvnZ_lHHkPq7CI6gdDhfB7nt5LRh3CVZsoxdw0f_0_wpovMPCQJGRPG_lhQJ0NOAFcRF6JHW6BhzqK698W9rwLIltzL4g8lanL752lRN-4C_r5HVIuzVw6b63s052L4zgV1x_XxLlfzhpYAVuX8bBmCrJhbhu7-VG_KtQrn85MgyW98AdXQmAzQ%3D%3D=&esi=access&getBlock=method&private=ttl&3600=hmac

I get them for header, global_messages, messages, footer, global_cookie_notice.... and then it starts all over, since the thing loops until I get bored and shut it down.