WP Varnish Domain Purge
=======================

Deze plugin voegt in wp-admin aan de bovenste WordPress-adminbalk de knop
"Varnish cache legen" toe.

Varnish-server:
93.114.128.68:6081

Werking
-------
De plugin verstuurt een HTTP PURGE-request naar de Varnish-server en zet:

Host: <huidige WordPress-domein>
X-WP-Purge-Host: <huidige WordPress-domein>

Daardoor kan Varnish uitsluitend objecten voor het huidige domein bannen.

Installatie WordPress
---------------------
1. Upload de ZIP via Plugins > Nieuwe plugin > Plugin uploaden.
2. Activeer "WP Varnish Domain Purge".
3. Open wp-admin.
4. Klik bovenin op "Varnish cache legen".

BELANGRIJK: Varnish VCL
-----------------------
Een standaard Varnish-installatie accepteert niet automatisch een PURGE die
alle URL's van één domein wist. Daarvoor moet de VCL dit ondersteunen.

Voorbeeld voor Varnish 4/5/6/7/8:

acl purge {
    "localhost";
    "127.0.0.1";
    # Voeg hier het publieke/private IP-adres toe van de WordPress/webserver
    # die het PURGE-request naar Varnish verstuurt.
    # "203.0.113.10";
}

sub vcl_recv {
    if (req.method == "PURGE") {
        if (client.ip !~ purge) {
            return (synth(405, "PURGE not allowed"));
        }

        if (!req.http.X-WP-Purge-Host) {
            return (synth(400, "Missing purge host"));
        }

        if (req.http.X-WP-Purge-Host != req.http.host) {
            return (synth(400, "Host mismatch"));
        }

        ban("obj.http.x-wp-cache-host == " + req.http.X-WP-Purge-Host);
        return (synth(200, "Domain cache purged"));
    }
}

sub vcl_backend_response {
    # Sla het domein intern op het cache-object op zodat BAN per domein werkt.
    set beresp.http.x-wp-cache-host = bereq.http.host;
}

sub vcl_deliver {
    # Deze interne header hoeft niet naar bezoekers te worden gestuurd.
    unset resp.http.x-wp-cache-host;
}

Na een VCL-wijziging moet Varnish opnieuw worden geladen.

Veiligheid
----------
- Alleen WordPress-gebruikers met manage_options kunnen de knop gebruiken.
- De actie is beschermd met een WordPress nonce.
- De plugin stuurt uitsluitend het domein uit home_url().
- Beperk PURGE in Varnish met de ACL tot het IP-adres van je WordPress-server.

Let op
------
Als 93.114.128.68:6081 via een firewall niet bereikbaar is vanaf de
WordPress-server, zal de plugin een foutmelding tonen.

Als je bestaande VCL al een andere PURGE/BAN-interface gebruikt, moet de
request in de plugin daarop worden aangepast.
