custom.vcl

#SOLO SE PUEDE PURGAR ATRAVEZ DE URLS ESPECIFICAS
acl purge {
    “localhost”;
    “127.0.0.1”;
}

#ESTA FUNCION ES USADA CUANDO EL CLIENTE REALIZA UNA PETICION (BROWSER DEL CLIENTE)
sub vcl_recv {
    #REDIRECCIONAR DE HTTP A HTTPS
    if ( (req.http.host ~ “^(?i)www.dominio.com” || req.http.host ~ “^(?i)dominio.com“) && req.http.X-Forwarded-Proto !~ “(?i)https”) {
        return (synth(750, “”));
    }
    #NORMALIZA LA CEBECERA Y REMUEVE LOS PUERTOS EN CASO DE HACE PRUEBAS SOBRE ESOS PUERTOS
    set req.http.Host = regsub(req.http.Host, “:[0-9]+”, “”);
    # Allow purging from ACL
    if (req.method == “PURGE”) {
        # If not allowed then a error 405 is returned
        if (!client.ip ~ purge) {
            return(synth(405, “This IP is not allowed to send PURGE requests.”));
        }
    # If allowed, do a cache_lookup -> vlc_hit() or vlc_miss()
    return (purge);
    }
    # Post requests will not be cached
    if (req.http.Authorization || req.method == “POST”) {
        return (pass);
    }
    # — WordPress specific configuration
    # Did not cache the RSS feed
    if (req.url ~ “/feed”) {
        return (pass);
    }
    # Blitz hack
    if (req.url ~ “/mu-.*”) {
        return (pass);
    }
    # Did not cache the admin and login pages
    if (req.url ~ “/wp-(login|admin)”) {
        return (pass);
    }
    # Do not cache the WooCommerce pages
    ### REMOVE IT IF YOU DO NOT USE WOOCOMMERCE ###
    if (req.url ~ “/(cart|my-account|checkout|addons|/?add-to-cart=)”) {
        return (pass);
    }
    # Remove the “has_js” cookie
    set req.http.Cookie = regsuball(req.http.Cookie, “has_js=[^;]+(; )?”, “”);
    # Remove any Google Analytics based cookies
    set req.http.Cookie = regsuball(req.http.Cookie, “__utm.=[^;]+(; )?”, “”);
    # Remove the Quant Capital cookies (added by some plugin, all __qca)
    set req.http.Cookie = regsuball(req.http.Cookie, “__qc.=[^;]+(; )?”, “”);
    # Remove the wp-settings-1 cookie
    set req.http.Cookie = regsuball(req.http.Cookie, “wp-settings-1=[^;]+(; )?”, “”);
    # Remove the wp-settings-time-1 cookie
    set req.http.Cookie = regsuball(req.http.Cookie, “wp-settings-time-1=[^;]+(; )?”, “”);
    # Remove the wp test cookie
    set req.http.Cookie = regsuball(req.http.Cookie, “wordpress_test_cookie=[^;]+(; )?”, “”);
    # Are there cookies left with only spaces or that are empty?
    if (req.http.cookie ~ “^ *$”) {
        unset req.http.cookie;
    }
    # Cache the following files extensions
    if (req.url ~ “.(css|js|png|gif|jp(e)?g|swf|ico)”) {
        unset req.http.cookie;
    }
    # Normalize Accept-Encoding header and compression
    # https://www.varnish-cache.org/docs/3.0/tutorial/vary.html
    if (req.http.Accept-Encoding) {
        # Do no compress compressed files…
        if (req.url ~ “.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$”) {
            unset req.http.Accept-Encoding;
        } elsif (req.http.Accept-Encoding ~ “gzip”) {
            set req.http.Accept-Encoding = “gzip”;
        } elsif (req.http.Accept-Encoding ~ “deflate”) {
            set req.http.Accept-Encoding = “deflate”;
        } else {
            unset req.http.Accept-Encoding;
        }
    }
    # Check the cookies for wordpress-specific items
    if (req.http.Cookie ~ “wordpress_” || req.http.Cookie ~ “comment_”) {
        return (pass);
    }
    if (!req.http.cookie) {
        unset req.http.cookie;
    }
    # — End of WordPress specific configuration
    # Did not cache HTTP authentication and HTTP Cookie
    if (req.http.Authorization || req.http.Cookie) {
        # Not cacheable by default
        return (pass);
    }
    # Cache all others requests
    return (hash);
}

#REDIRECCIONAR DE HTTP A HTTPS
sub vcl_synth {
    if (resp.status == 750) {
        set resp.status = 301;
        set resp.http.Location = “https://www.dominio.com” + req.url;
        return(deliver);
    }
}

sub vcl_pipe {
    return (pipe);
}

sub vcl_pass {
    return (fetch);
}

# The data on which the hashing will take place
sub vcl_hash {
    hash_data(req.url);
    if (req.http.host) {
        hash_data(req.http.host);
    } else {
        hash_data(server.ip);
    }
    # If the client supports compression, keep that in a different cache
    if (req.http.Accept-Encoding) {
        hash_data(req.http.Accept-Encoding);
    }
    if (req.http.X-Forwarded-Proto) {
        hash_data(req.http.X-Forwarded-Proto);
    }
    return (lookup);
}

# This function is used when a request is sent by our backend (Nginx server)
sub vcl_backend_response {
    # Remove some headers we never want to see
    unset beresp.http.Server;
    unset beresp.http.X-Powered-By;
    # For static content strip all backend cookies
    if (bereq.url ~ “.(css|js|png|gif|jp(e?)g)|swf|ico”) {
        unset beresp.http.cookie;
    }
    # # Only allow cookies to be set if we’re in admin area
    # if (beresp.http.Set-Cookie && bereq.url !~ “^/wp-(login|admin)”) {
    #         unset beresp.http.Set-Cookie;
    #     }
    if (!(bereq.url ~ “wp-(login|admin)” || bereq.url ~ “(secret-login)”)) {
        unset beresp.http.set-cookie;
    }
    # don’t cache response to posted requests or those with basic auth
    if ( bereq.method == “POST” || bereq.http.Authorization ) {
        set beresp.uncacheable = true;
        set beresp.ttl = 120s;
        return (deliver);
    }
    # don’t cache search results
    if ( bereq.url ~ “?s=” ){
        set beresp.uncacheable = true;
        set beresp.ttl = 120s;
        return (deliver);
    } 
    # only cache status ok
    if ( beresp.status != 200 ) {
        set beresp.uncacheable = true;
        set beresp.ttl = 120s;
        return (deliver);
    }
    # A TTL of 24h
    set beresp.ttl = 24h;
    # Define the default grace period to serve cached content
    set beresp.grace = 30s;
    return (deliver);
}

# The routine when we deliver the HTTP request to the user
# Last chance to modify headers that are sent to the client
sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = “cached”;
    } else {
        set resp.http.x-Cache = “uncached”;
    }
    # Remove some headers: PHP version
    unset resp.http.X-Powered-By;
    # Remove some headers: Apache version & OS
    unset resp.http.Server;
    # Remove some heanders: Varnish
    #unset resp.http.Via;
    #unset resp.http.X-Varnish;
    return (deliver);
}

sub vcl_init {
    return (ok);
}

sub vcl_fini {
    return (ok);
}

sub vcl_miss {
    if (!(req.url ~ “wp-(login|admin)” || req.url ~ “(secret-login)”)) {
        unset req.http.cookie;
    }
}

#CUANDO HAY UN ERROR EN EL SERVIDOR BACKEND MANDA UN MENSAJE DE ERROR Y FORZA ERROR 503
sub vcl_backend_error {
    set beresp.http.Content-Type = “text/html; charset=utf-8”;
    synthetic( {“Error en servidor backend”} );
    set beresp.status = 503;
    return (deliver);
}

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

En Programador Novato vivimos de los anuncios, hemos detectado que está utilizando extensiones para bloquear anuncios. Ayudanos deshabilitando tu bloqueador de anuncios. :)