This plugin drives an already-installed Varnish daemon from the panel: start, stop and restart the service, read live counters, purge cached objects, and edit the VCL. Varnish itself is installed by the plugin's install.sh, not by the plugin at runtime — if varnishd is missing the page says so and the rest stays inert.
The statistics view parses varnishstat -1 -j and shows cache hits, misses, hit-pass, a computed hit rate, request count and rate, object count, sessions and daemon uptime. Purging is done with Varnish bans and comes in three modes: everything, a single host, or a URL path/regex; both the host and the path forms are pattern-checked before being handed off, and again in the agent.
The VCL editor reads and writes /etc/varnish/default.vcl. Nothing is written until the content passes a varnishd -C dry run, so a syntax error is rejected up front rather than sitting on disk waiting to break the next boot; after a successful write the service is reloaded, and if that reload fails the previously loaded VCL stays live. There is also a WordPress-oriented VCL template you can load into the editor: it bypasses the cache for wp-admin, wp-login, wp-cron, xmlrpc and preview URLs and for logged-in, commenter and WooCommerce sessions, caches anonymous GET/HEAD responses for an hour with cookies stripped, and tags objects with their host so per-domain purges work. The template preserves your existing backend default block and is only proposed — you review it and save it yourself.
Because the panel runs unprivileged, service control, varnishstat's shared-memory access, varnishadm's secret file and writes under /etc/varnish all go through the root agent. Only the harmless probes (varnishd -V, systemctl is-active) run directly.
Availability: Free on every plan, including the Free plan.
Use VinzaPanel's REST API to download and install this app programmatically.
POST /plugins/api/download/varnish/ Content-Type: application/json { "panel_version": "1.0.0" }
{
"success": true,
"plugin_id": "varnish",
"version": "1.1.1",
"download_url": "..."
}