Nginx Try_Files to create local content cache

cachenginxrewrite

I'm trying to either serve images locally, or from a share (locally refreshed overnight).

My nginx site is served across 2 or more servers, to keep all the content in sync across each server, I'm storing it in an Azure file share, and that's the location root (/mnt/wp).

This works pretty well (along with Nginx Caching), but the images have a pretty slow wait time, which I assume is a latency issue client-server-azure. So to make things faster, I'd like to serve the images locally (/var/www/), if available, then fall back to azure (/mnt/wp)

So far I've got this location block, but the logs are showing a redirect loop..

Am I missing something?

   location /wp-content/ {
            add_header X-uploads $uri;
            try_files @contentCache/$uri $uri;
    }

    location @contentCache{
            root /var/www;
    }

Best Answer

Your syntax for try_files is wrong. A named location should be the default action placed in the last element. Something like this:

location /wp-content/ {
    ...
    try_files $uri @contentCache;
}
location @contentCache {
    ...
    try_files $uri =404;
}

See this document for more.

If you need to reverse the order, just swap around your root directives.