• I am looking into using WP Super Cache to cut down on traffic to my database hosts and improve render times on my origin hosts. My setup is a bit of a fringe case, so I’m not sure if the plugin will be able to accommodate my needs without some heavy customization. My setup overview is:

    -Akamai Global CDN (which provides geo-locale data to my origin hosts via http headers)
    -Dual Zeus Load Balancers (running as origin-web & routing to application & media hosts)
    -Four WP Application hosts running NGINX & php-fastcgi (which parse country code into $_SERVER[country] variable)
    -Two co-mastered DB servers
    -Two media hosts serving all static files (js/jpgs/video/etc)

    Just “out of the box” the plugin does an incredible job of speeding up render times on my origin servers and cutting down traffic to my database hosts using PHP to serve cache files. The biggest hurdle I am going to have is that I am rendering content server-side specific to an end users geo-location. With regards to my CDN & to cope with the same page having different content based upon an end-users locale I have implemented a custom metadata setup with my CDN that creates unique cache-keys based upon location requirements (so instead of all requests going to origin-web.server.com they get routed as origin-web-us/origin-web-ca/origin-web-uk/etc.)

    SOOO, you can probably (hopefully) see how I’m at a bit of a wall on how to implement caching in my application hosts without having users from different locale’s seeing the same page. For example:

    -Joe, who is in the US, requests https://www.mysite.com, which gets cached
    -Mary, who is in Canada, requests https://www.mysite.com and Super Cache wants to serve her the file that was cached on Joe’s request, so Mary ends up seeing US based content

    The obvious answer would be to append regions to the URL to make them unique, but for SEO reasons I can’t have the same piece of content living at 5 or 6 different URL locations.

    Anybody have any bright ideas out there? Hopefully someone else has been through a similar scenario and found a solution… If I can tweak Super Cache to use $_SERVER[country] as part of it’s logic while generating the long string in the static page names ( /wp-content/cache/wp-cache-#######.html ) that should be sufficient, but I am daunted by the task of reverse-engineering this solution. :-p

    https://www.ads-software.com/extend/plugins/wp-super-cache/

Viewing 3 replies - 1 through 3 (of 3 total)
  • You could certainly modify the plugin to use the country variable. Look in wp-cache-phase1.php and at the developer docs (https://ocaoimh.ie/wp-super-cache-developers/)

    I would recommend using the dev version (https://downloads.www.ads-software.com/plugin/wp-super-cache.zip) and look at PHP caching and the “supercache_filename_str” action to filter the filename used to store the cached content. You could add the country code to the filename, like index-ca.html, index-ie.html?

    You’ll have to write a supercache plugin that is fired really early in the PHP process so it’ll have to do a lot of the geolocation work if that is currently handled by another WP plugin (as that plugin won’t be loaded yet)

    Thread Starter jarad.ronald

    (@jaradronald)

    Thanks for the info, Donncha. The “geolocation work” is done pre-PHP. My NGINX configuration parses the http header variable into $_SERVER[‘COUNTRY’] and from there geo-specific pages in my theme case based upon that variable. SO, it looks like I can make a single edit to wp-cache-phase1.php to get me where I need to be:

    105: $key = $blogcacheid . md5( $wp_cache_key );

    becomes

    105: $key = $_SERVER['COUNTRY'] . '-' . $blogcacheid . md5( $wp_cache_key );

    And things appear to fall into place. Instead of my homepage having a single cache file:

    /wp-content/cache/wp-cache-6c5d070c02d3ef4d2ef9f36372988f1a.html

    I now get variations:

    /wp-content/cache/wp-US-cache-6c5d070c02d3ef4d2ef9f36372988f1a.html
    /wp-content/cache/wp-CA-cache-6c5d070c02d3ef4d2ef9f36372988f1a.html
    /wp-content/cache/wp-GB-cache-6c5d070c02d3ef4d2ef9f36372988f1a.html

    I will read the developer documentation, but turning my ‘core modification’ into a plugin should be relatively simple.

    You’re probably better off using the wp_cache_key cacheaction to modify the cache key. You’ll have to create a WP Super Cache plugin to do it though. Unfortunately when upgrading plugins WordPress deletes the plugin directory so you’ll have to point $wp_cache_plugins_dir at a new directory to use for plugins.

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘[Plugin: WP Super Cache] Super Cache with Geo-Targeting’ is closed to new replies.