Why cannot the same path for cache be used several times?
mdounin at mdounin.ru
Wed Aug 6 17:37:43 UTC 2014
On Wed, Aug 06, 2014 at 06:48:29PM +0200, B.R. wrote:
> On Wed, Aug 6, 2014 at 8:47 AM, itpp2012 <nginx-forum at nginx.us> wrote:
> > keys_zone is memory, the other a 'file' path, I could imagine a 'cachehash'
> > used could overwrite the other.
> I thought of that, but learning how variables are resolved at request
> time, and knowing that configuration is parsed on HUP signal, I though
> nginx would handle cache requests from different servers/locations the same
> way it is dealing with them when they are coming from the same server.
> I have not digged into the code, and I do not know if there is such thing
> sa a 'cache manager' which would centralize cache management and respond to
> cache events.
> keys_zone are normally enough to avoid overwriting cache entries from other
> Failing to do so, it would mean several keys_zone being used in the same
> cache are not isolated and can lead to collision... that would be
> From the assumption that keys_zone are collision-free, it would seem
> reasonable to share the same cache file over several calls.
> IMHO, the only thing that shall fail is the use of the same keys_zone on
> the same file more than once.
> Does not that sound reasonable?
To specify a cache, you have to define:
1) Unique name for the cache, to be used in proxy_cache
directives. This also the name of shared memory zone used to
store the cache in-memory data.
2) Path to a directory to store cache files.
Each cache is completely isolated from other caches (if any), and
knows nothing about them. Therefore, the directory used to store
cache files must be unique - if not, cache entries with identical
keys will be mapped to the same file, and will overwrite each
other. On the other hand, identical keys in different caches
doesn't mean that resources match, keys are expected to be unique
only within a given cache.
In most cases, you'll need only one cache; just use it multiple
times as appropriate with the proxy_cache directive. If you need
more than one cache for some reason, you'll have to specify both
unique name and unique storage path to avoid possible collisions.
More information about the nginx