cache gzipped content with proxy_pass

Maxim Dounin mdounin at mdounin.ru
Mon Aug 16 18:48:01 MSD 2010


Hello!

On Mon, Aug 16, 2010 at 08:56:47AM -0400, chrisl wrote:

> AFAIK nginx only stores plain (uncompressed) content when acting as a
> caching proxy server.

Not really.  nginx caches what upstream server sent to it.  If 
response was compressed by upstream server - it will cache 
compressed response.

> With gzip=on, content for gzip-accepting clients
> will be compressed by the server _for_ _every_ _request_ (?).

Yes - unless upstream server already returned precompressed 
content.

> Wouldn't it be better to have two cache files like this:
> 
> /data/nginx/cache/c29b7f54b2df7773722d382f4809d65029c
> /data/nginx/cache/c29b7f54b2df7773722d382f4809d65029c.gz

You may want to follow this thread:

http://nginx.org/pipermail/nginx/2010-March/019471.html

It is believed that separate gzip cache is better idea.

> Another solution would be to add the internal variable gzip_ok to the
> config variable space. Then one could add this variable to
> proxy_cache_key:
> 
>  proxy_cache_key "...:$gzip_ok:..."
> 
> Currently I've added http_accept_enconding to the cache key, but since
> there are hundreds of different permutations for the value this is not
> an optimal solution.

The problem is that nginx itself and upstream server may have 
different ideas on what may be compressed.  And you need 
upstream's one here, not nginx's one.  Though probably it's 
a good idea to expose nginx's one anyway.

Maxim Dounin



More information about the nginx mailing list