Proxy Cache Purge



This plugin does not install nor configure a cache proxy. It acts as an interface with such services.

One common method of caching content for websites is via the use of reverse proxy caching. Common examples of this are Varnish and Nginx. These systems allow a website to update content and have the visitors experience cached without the need for complex plugins storing the files locally and using up a users disk space.

A reverse proxy cache is installed in front of a server and reviews requests. If the page being requested is already cached, it delivers the cached content. Otherwise it generates the page and the cache on demand.

The Proxy Cache Purge plugin sends a request to delete (aka flush) the cached data of a page or post every time its modified.

How It Works

When content on a site is updated by WordPress, the plugin reaches out to the proxy cache service with the URL of the page, requesting the cache be deleted.

Not all page are deleted from the cache on every change. For example, when a post, page, or custom post type is edited, or a new comment is added, only the following pages will purge:

  • The front page
  • The post/page edited
  • Any categories, tags, and/or custom taxonomies associated with the page
  • Related feeds
  • Associated JSON API pages

In addition, your entire cache will be deleted on the following actions:

  • Changing themes
  • Pressing the Empty Cache button on the toolbar

Plugins can hook into the purge actions as well, to filter their own events to trigger a purge.

On a multisite network using subfolders, only network admins can purge the main site.

Development Mode

If youre working on a site and need to turn off caching in one of two ways:

  1. Add define( 'VHP_DEVMODE', true ); to your wp-config.php file
  2. Go to Proxy Cache -> Settings and enable debug mode for 24 hours at a time

That will break cache on page loads. It is not recommended for production!



Purge commands let you empty the cache.

  • wp varnish purge Flush the cache for your front page
  • wp varnish purge [] Flush the cache for one URL

You can use the parameter --wildcard to empty everything from that URL down. So if you wanted to empty cache for all themes, you would do this:

  • wp varnish purge --wildcard


Debugging can help you figure out why your cache isnt working as well as it could. The default is for your home page, but you can pass any URL on your domain.

  • wp varnish debug []

Available parameters:

  • [--include-headers] Include headers in debug check output
  • [--include-grep] Grep active theme and plugin directories for common issues


Development mode allows you to disable the cache, temporarily.

  • wp varnish devmode [] Change development mode state

Privacy Policy

As of version 5, this plugin no longer uses any remote data.



No special instructions apply.

If you have a 3rd party proxy service (such as Sucuri or Cloudflare) you will need to add an IP address on the Proxy Cache -> Settings page. Alternatively you can add a define to your wp-config.php file: define('VHP_VARNISH_IP','');

When using Nginx based proxies, your IP will likely be localhost.


  • Pretty Permalinks enabled
  • A server based proxy cache service (such as Varnish or Nginx)


Please report all issues in the support forums

If you have code patches, pull requests are welcome.

No. This plugin tells your cache system when content is updated, and to delete the cached data at that time.

Speed and stability. Emptying too much of a cache on every change can slow a server down. This plugin does its best to determine what needs to be deleted and when, while providing hooks for developers to use as necessary.

Yes. Click the Empty Cache button on the Right Now Dashboard (see the screenshot if you cant find it). Theres also an Empty Cache button on the admin toolbar.

If you dont see a button, then your account doesnt have the appropriate permissions. Only administrators can empty the entire cache. In the case of a subfolder multisite network, only the network admins can empty the cache for the primary site.

No. WordPress cant detect those file changes so it cant tell your cache what to do. You will need to use the Empty Cache buttons when youre done editing your code.

No. Some of them have behaviours that causes them not to cache, either by accident or design. Its incredibly hard to debug those, since many of the related issues are contextual (like if you save a page with a special setting). Ive done my best to flag everything as possible issues with the debugger.

Yes. Full documentation can be found on Custom Filters in the wiki.

Kind of. You can use development mode to have WordPress tell your proxy service not to serve cached content, but the content will still be cached by the service.

There are three ways to do this:

  1. Chose Pause Cache (24hrs) from the Cache dropdown menu in your toolbar
  2. Go to Proxy Cache -> Settings and enable development mode
  3. Add define( 'VHP_DEVMODE', true ); to your wp-config.php file.

The first two options will enable development mode for 24 hours. If youre working on long term development, you can should use the define.

It is not recommended you use development mode on production sites for extended periods of time, as it will will slow your site down and lose all the benefits of caching in the first place.

If youve disabled caching via the define, then you cannot restart cache via the plugin. You would need to change define( 'VHP_DEVMODE', true ); to define( 'VHP_DEVMODE', false ); in your wp-config.php file.

Due to the damage this can cause a site, access is limited to admins only. In the case of a multisite network, only Network Admins can disable caching and they must do so via wp-config.php for security.

While development mode is on, your server will continue to cache content but the plugin will tell WordPress not to use the cached content. That means files that exist outside of WordPress (like CSS or images) may serve cached content. The plugin does its best to add a No Cache parameter to javascript and CSS, however if a theme or plugin doesnt use proper WordPress enqueues, then their cached content will be shown.

Because the server is still caching content. The plugin provides a way to flush the cache for those pages, as well as anything not included in WordPress, for your convenience.

From your WordPress Dashboard, go to Proxy Cache > Check Caching. There a page will auto-scan your front page and report back any issues found. This includes any known problematic plugins. You can use it to scan any URL on your domain.

PageSpeed likes to put in Caching headers to say not to cache. To fix this, you need to put this in your .htaccess section for PageSpeed: ModPagespeedModifyCachingHeaders off

If youre using nginx, its pagespeed ModifyCachingHeaders off;

When you use CloudFlare or any other similar service, youve put a proxy in front of the servers proxy. In general this isnt a bad thing, though it can introduce some network latency (that means your site may run slower because it has to go through multiple layers to get to the content). The problem arises when WordPress tries to send the purge request to your domain name and, with a proxy, that means the proxy service and not your website.

On single-site, you can edit this via the Proxy Cache > Check Caching page. On Multisite, youll need to add the following to your wp-config.php file: define('VHP_VARNISH_IP','');

Replace with the IP of your Proxy Cache Server (not CloudFlare). DO NOT put http in this define. If youre on nginx, youll want to use localhost instead of an IP address.

If you want to use WP-CLI, you can set an option in the database. This will not take precedence over the define, and exists for people who want to use automation tools: wp option update vhp_varnish_ip

This is usually related to CloudFlares APO setup. I have an open ticket with CloudFlare trying to debug this, but basically whatever theyre doing with APO doesnt like the flush command and times out (or crashes).

Your IP address is incorrect. Check the IP of your server and then the setting for your proxy cache IP. If theyre not the same, thats likely why.

Your proxy IP must be one of the IPs that the service is listening on. If you use multiple IPs, or if youve customized your ACLs, youll need to pick on that doesnt conflict with your other settings.

For example, if you have a Varnish based cache and its listening on a public and private IP, youll want to pick the private. On the other hand, if you told Varnish to listen on (i.e. listen on every interface you can) you would need to check what IP you set your purge ACL to allow (commonly aka localhost), and use that (i.e.

If your web host set up your service, check their documentation.

You may enter them, separated by a comma, on the settings page.

So far this plugin has been reported to successfully function on Varnish v 2 through v 6.5.

It can, if youve configured Nginx caching to respect the curl PURGE request. If this doesnt work, try setting your Varnish IP to localhost as Nginx requires a service control installed for the IP address to work.

This is a question beyond the support of plugin. I do not have the resources available to offer any configuration help. Here are some basic gotchas to be aware of:

  • To empty any cached data, the service will need to respect the PURGE command
  • Not all cache services set up PURGE by default
  • When flushing the whole cache, the plugin sends a PURGE command of /.* and sets the X-Purge-Method header to regex
  • Nginx expects the IP address to be localhost

Yes IF the service has an interface. Sadly Nginx does not. Detailed directions can be found on the debugging section on GitHub. Bear in mind, these interfaces tend to be command-line only.

  • Yes, I do work for DreamHost
  • No, this plugin is not DreamHost Only

This plugin is installed by default for all DreamPress installs on DreamHost, and I maintain it for DreamHost, but it was not originally an official DreamHost plugin which means I will continue to support all users to the best of my ability.

Leave a Reply

Your email address will not be published.

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed

Most Viewed Posts