Support » Plugin: Nginx Helper » Feature Suggestion for Additional Purge Options

  • ResolvedPlugin Contributor Darren Slatten

    (@darren-slatten)


    It would be great if the plugin could incorporate these options in a future release:

    Nginx Settings

    • Plugin Options
    • Purging Options
      • Purge Homepage:
      • Purge Post/Page/Custom Post Type:
      • Purge Archives:
      • Purge Everything:
        • when a new theme is activated.
        • when the current theme is modified (e.g., customize header image, background, colors, etc.).
        • when a menu is modified or added.
        • when a widget is modified or added.

    An alternative might be to simply add a manual Purge Cache button to the settings page.

    Also, I want to say thank you for creating this plugin and making it publically available. 🙂

    http://wordpress.org/extend/plugins/nginx-helper/

Viewing 10 replies - 16 through 25 (of 25 total)
  • Plugin Contributor pjv

    (@pjv)

    fwiw, there’s a lot of protective code in the function, but WP Super Cache pretty much does this.

    see the function prune_super_cache() in the file wp-cache-phase2.php

    Plugin Contributor Darren Slatten

    (@darren-slatten)

    Plugins like WP Super Cache create the cache files in directories (e.g., /wp-content/cache) that are owned by the user executing the PHP script, so it’s “safe” to allow PHP to delete those cache files.

    But Nginx Helper (i.e., the user executing the PHP script) doesn’t actually create/own the cache files; the nginx web server itself does. Nginx Helper is more like an interface to nginx’s native caching functionality. That is, it can trigger the purging of cache files, but it doesn’t delete them directly.

    In fact, Nginx Helper shouldn’t even have the necessary user privileges to delete the nginx cache directly, especially in a virtual hosting setup. This is because the cache files are written by nginx to a directory outside of the virtual host’s document root. Allowing Nginx Helper to delete these files would be analogous to a WP plugin that could delete other websites on the same server–it’s possible, but only if the server admin disregards basic security best practices.

    Plugin Contributor pjv

    (@pjv)

    got it.

    thanks for taking the time to write that explanation up.

    Plugin Contributor pjv

    (@pjv)

    looks like the plugin authors changed their minds about this issue and decided to go ahead and implement a simple unlink on the cache directory.

    Plugin Author Rahul Bansal

    (@rahul286)

    Actually we are not unlinking cache directory itself but content inside it.

    This is easiest and only working workaround we found.

    If you have any suggestions, please pass on.

    Plugin Contributor pjv

    (@pjv)

    oops, yes, sorry for my sloppy language. what you said is what i actually meant.

    that was actually my original suggestion from a while back on how to purge the cache. it is fast and easy. it has the security issues that other contributors to this thread have brought up, but to me it still seems like a good solution.

    what i am struggling with now is a way to manage my nginx configs and my cache paths so that i can run multiple wordpress installs in parallel and be able to purge them independently.

    up to now, i have been storing the cache for all the sites in one cache directory which lets me set up a single fastcgi_cache set of directives in my http block of the main nginx.conf. since the cache key includes the hostname, it works fine in practice. the problem is that with this cleaner and simpler method of purging, any “full purge” is really a FULL purge – eliminating the entire cache for all the sites and that’s not what i really want.

    so i am trying to come up with a clean scheme now to have separate cache directories for each site but not have to also write a full set of separate fastcgi_cache directives into the config for each separate site since the only thing that varies between them would be one element in the cache path and the name for the keys_zone. would be nice if there was a simple way to plop in a variable, but due to scope for variables and the fastcgi_cache directives in nginx configs, i can’t figure out how to do it.

    anyone have any ideas or a working example?

    Plugin Author Rahul Bansal

    (@rahul286)

    @pjv

    I am aware of this issue. We already have nginx-cache shared between many WordPress-sites.

    One idea would be to define multiple zones like:

    fastcgi_cache_path /var/run/nginx-cache/site1/ levels=1:2 keys_zone=WPSITEONE:1
    000m inactive=60m;
    fastcgi_cache_path /var/run/nginx-cache/site2/ levels=1:2 keys_zone=WPSITETWO:1
    000m inactive=60m;

    Then for site1, in wp-config.php you can add a line like:

    define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/site1/');

    Similarly, for site2, in wp-config.php you can add a line like:

    define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/site2/');

    Reason for not giving UI to update cache location is security concerns. Though at this point, I am not sure how much insecure it would be.

    Plugin Author Rahul Bansal

    (@rahul286)

    Update:

    If you decide to take above path, please don’t forget to update KEY_ZONE name in fastcgi_cache and fastcgi_cache_purge settings.

    Plugin Contributor pjv

    (@pjv)

    thanks @rahul286, i did not know that nginx let you configure multiple zones like that. it doesn’t exactly give me what i want since i still have to fully configure every host separately, but at least it would make separate cache directories possible.

    i have just been trying (failing) to set up something like this (in http):

    fastcgi_cache_path /home/sites/cache/$host levels=1:2 keys_zone=$host:500m inactive=60m;

    but for this purpose $host is not substituted in this context (even though it is for other directives in the http block – why?), and i end up with a cache directory actually named “$host”.

    now i’m wondering if there is a way to use the map directive to do something like this.

    Plugin Author Rahul Bansal

    (@rahul286)

    I think $host is available inside server{} block and fastcgi_cache_path need to specified outside server{} block.

    Apart from this, I am not sure if all nginx directives supports variable in their all values.

    By the way, for using variable is stings, try a syntax like:

    /home/sites/cache/${host}

    Note curly braces around word/variable host.

Viewing 10 replies - 16 through 25 (of 25 total)
  • The topic ‘Feature Suggestion for Additional Purge Options’ is closed to new replies.