# Nginx + caching of static files

**URL:** <https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897>\
**Category:** NGINX\
**Created:** [April 7, 2009, 7:26am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897 "2009-04-07T07:26:08Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 7:26am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/1 "2009-04-07T07:26:08Z")

</div>

Hi Guys,

I was hoping someone could point out a document where it can teach me  
how to setup nginx + caching. I know that traditionally nginx did not  
have a native caching and it required you to run ncache or cachemem in  
order to perform caching of static content… but does nginx now allow  
basic static file caching without the use of any other 3rd app?

Im trying to understand if nginx now has a native caching which would  
allow caching of static content. I dont want to get fancy in anyway, I  
simply want to allocate say 200mb of storage space to allow caching of  
static content. the 200mb should be updated with the most  
active/recently seen file request.

reason? im trying to allow nginx to serve the static files from disk  
(if it has seen it previously) and not have to go back to the origin  
server every single time.

Thanks  
Payam

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 7:40am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/2 "2009-04-07T07:40:46Z")

</div>

On Mon, Apr 06, 2009 at 10:14:36PM -0700, Payam C. wrote:

> simply want to allocate say 200mb of storage space to allow caching of  
> static content. the 200mb should be updated with the most  
> active/recently seen file request.
> 
> reason? im trying to allow nginx to serve the static files from disk  
> (if it has seen it previously) and not have to go back to the origin  
> server every single time.

Get the lastest nginx (0.7.50) and use

```
proxy_cache_path /path/to/cache levels=1:2
                  keys_zone=one:10m
                  inactive=7d max_size=200m;

proxy_temp_path /path/to/temp; # must be on the same filesystem
                                  # as cache

server {

    location / {
        proxy_pass http://backend;

        proxy_cache one;
        proxy_cache_key backend$request_uri;
        proxy_cache_valid 200 1h;
        proxy_cache_use_stale error timeout invalid_header;
    }
```

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 7:53am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/3 "2009-04-07T07:53:04Z")

</div>

2009/4/6 Igor S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > Im trying to understand if nginx now has a native caching which would
> 
> ```
> proxy_pass http://backend;
> 
> ```
> 
> Igor S.  
> [Igor Sysoev](http://sysoev.ru/en/)

proxy\_cache\_path /path/to/cache levels=1:2  
keys\_zone=one:10m  
inactive=7d max\_size=200m;

proxy\_temp\_path /path/to/temp; # must be on the same filesystem  
# as cache

server {

```
   location / {
       proxy_pass http://backend;

       proxy_cache one;
       proxy_cache_key backend$request_uri;
       proxy_cache_valid 200 1h;
       proxy_cache_use_stale error timeout invalid_header;
   }

```

few questions:  
1- what does the keys\_zone used for  
2- what does the “200 1h” in proxy\_cache\_valid mean  
3- how is the “proxy\_cache\_use\_stale error timeout invalid\_header”  
used?

thanks again Igor,  
-Payam

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 8:05am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/4 "2009-04-07T08:05:22Z")

</div>

On Mon, Apr 06, 2009 at 10:46:24PM -0700, Payam C. wrote:

> > > 
> > 
> > ## Get the lastest nginx (0.7.50) and use š š š šlocation / {
> 
> few questions:  
> 1- what does the keys\_zone used for  
> 2- what does the “200 1h” in proxy\_cache\_valid mean  
> 3- how is the “proxy\_cache\_use\_stale error timeout invalid\_header” used?

[http://wiki.nginx.org/NginxHttpProxyModule#proxy\_cache](http://wiki.nginx.org/NginxHttpProxyModule#proxy_cache)

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 10:03am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/5 "2009-04-07T10:03:13Z")

</div>

On Mon, Apr 6, 2009 at 11:03 PM, Payam C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > > > > Hi Guys,  
> > > > > static content. the 200mb should be updated with the most  
> > > > > inactive=7d max\_size=200m;  
> > > > > proxy\_cache\_key backend$request\_uri;
> > > 
> > > ```
> > > proxy_pass http://backend;
> > > 
> > > ```
> > > 
> > > 1- what does the keys\_zone used for
> 
> –  
> Payam Tarverdyan Chychi  
> Network Security Specialist / Network Engineer

Igor,

using the caching info … i get a “redirect loop” when trying to  
download [domain.com/images/spacer.gif](http://domain.com/images/spacer.gif) when the file does not exist  
on the origin server … ive also been able replicate this with YSlow  
for firefox

When bypassing the proxy/cache and connecting directly to the origin,  
i get the proper 404 error  
any ideas?

Thanks

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 10:12am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/6 "2009-04-07T10:12:00Z")

</div>

On Tue, Apr 07, 2009 at 12:55:37AM -0700, Payam C. wrote:

> > > > > > simply want to allocate say 200mb of storage space to allow caching of  
> > > > > > š š š š š š š š š š škeys\_zone=one:10m  
> > > > > > š š š š š šproxy\_cache š š š š š š one;
> > > > 
> > > > š š š šlocation / {  
> > > > few questions:
> 
> Igor,
> 
> using the caching info … i get a “redirect loop” when trying to  
> download [domain.com/images/spacer.gif](http://domain.com/images/spacer.gif) when the file does not exist  
> on the origin server … ive also been able replicate this with YSlow  
> for firefox
> 
> When bypassing the proxy/cache and connecting directly to the origin,  
> i get the proper 404 error  
> any ideas?

Probably you have something like

```
   error_page 404 /404.html;
   proxy_intercept_errors on;
   recursive_error_pages on;

```

without

```
   location = /404.html {

```

so the /404.html is proxied to backend again.

Also you may cache 404 errors too:

```
   proxy_cache_valid 200 1h;
   proxy_cache_valid 404 5m;

```

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 11:17am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/7 "2009-04-07T11:17:05Z")

</div>

2009/4/7 Igor S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > > > > 2009/4/6 Igor S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> > > > > 
> > > > > > > Im trying to understand if nginx now has a native caching which would
> > > > > > 
> > > > > > ```
> > > > > > proxy_pass http://backend;
> > > > > > 
> > > > > > ```
> > > > > > 
> > > > > > Igor S.  
> > > > > > server {
> > > > 
> > > > Igor S.
> > 
> > any ideas?
> 
> [Igor Sysoev](http://sysoev.ru/en/)

Right on… that was the problem. fixed with adding exactly what you  
said… im now also caching 404

thanks again  
-payam

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 8:11am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/8 "2009-04-07T08:11:50Z")

</div>

thank you sir =) you are a king!

-Payam

2009/4/6 Igor S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 7, 2009, 11:40am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/9 "2009-04-07T11:40:33Z")

</div>

[www.ncache.org](http://www.ncache.org)  
an nginx cache module

maybe this can help u .

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 8, 2009, 1:19pm UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/10 "2009-04-08T13:19:01Z")

</div>

On Wed, Apr 08, 2009 at 10:51:59AM +0800, ??? wrote:

> Dear Igor,
> 
> Then, how to use proxy\_cache WITH flv streaming?  
> I tried proxy\_cache feature, but it seems that the flv streaming function does not work with proxy\_cache.

No, flv is not filter, but handler, thefore it’s not possible.

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 8, 2009, 1:57pm UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/11 "2009-04-08T13:57:10Z")

</div>

shinepf

ncache will only compile with versions up to 0.7.43.  
with newer once there is a compile error because of the change in  
ngx\_http\_cache\_s structure.

are You going to fix anytime soon?

–  
Best Regards  
Tomasz P.

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 8, 2009, 5:05am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/12 "2009-04-08T05:05:39Z")

</div>

Dear Igor,

Then, how to use proxy\_cache WITH flv streaming?  
I tried proxy\_cache feature, but it seems that the flv streaming  
function does not work with proxy\_cache.

Thanks

Best Regard,

Peng Wu  
2009-04-08

On Mon, Apr 06, 2009 at 10:14:36PM -0700, Payam C. wrote:

> simply want to allocate say 200mb of storage space to allow caching of  
> static content. the 200mb should be updated with the most  
> active/recently seen file request.
> 
> reason? im trying to allow nginx to serve the static files from disk  
> (if it has seen it previously) and not have to go back to the origin  
> server every single time.

Get the lastest nginx (0.7.50) and use

```
proxy_cache_path /path/to/cache levels=1:2
                  keys_zone=one:10m
                  inactive=7d max_size=200m;

proxy_temp_path /path/to/temp; # must be on the same filesystem
                                  # as cache

server {

    location / {
        proxy_pass http://backend;

        proxy_cache one;
        proxy_cache_key backend$request_uri;
        proxy_cache_valid 200 1h;
        proxy_cache_use_stale error timeout invalid_header;
    }
```

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 9, 2009, 6:33am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/13 "2009-04-09T06:33:05Z")

</div>

On Wed, Apr 08, 2009 at 11:16:30AM +0000, Glen L. wrote:

> How about jpg, css, js or any other files?

No problems with these files. Actually, there are no problems with flv  
itself. The issue is when you want to get /some.flv?start=5000.  
However, it seems flv handler can be converted easy enough to filter.

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 9, 2009, 8:51am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/14 "2009-04-09T08:51:18Z")

</div>

Hello!

On Wed, Apr 08, 2009 at 03:18:18PM +0400, Igor S. wrote:

> On Wed, Apr 08, 2009 at 11:16:30AM +0000, Glen L. wrote:
> 
> > How about jpg, css, js or any other files?
> 
> No problems with these files. Actually, there are no problems with flv  
> itself. The issue is when you want to get /some.flv?start=5000.  
> However, it seems flv handler can be converted easy enough to filter.

I wrote generic bytes filter some time ago, and as far as I  
understand it may be used for .flv streaming with some trivial  
rewrites. I’ve never tried though.

[http://mdounin.ru/hg/ngx\_http\_bytes\_filter\_module/](http://mdounin.ru/hg/ngx_http_bytes_filter_module/)  
[http://mdounin.ru/hg/ngx\_http\_bytes\_filter\_module/raw-file/tip/README](http://mdounin.ru/hg/ngx_http_bytes_filter_module/raw-file/tip/README)

Maxim D.

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 10, 2009, 8:52am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/15 "2009-04-10T08:52:06Z")

</div>

On Thu, Apr 09, 2009 at 02:27:15PM -0500, Resicow wrote:

> Hi Igor (and everyone else),
> 
> I had a few quick questions about the new proxy\_cache feature, and I  
> apologize if they have already been answered.
> 
> 1. What about query\_strings? Does proxy\_cache ignore or include  
> query\_strings? Is there a way to have it ignore query\_strings in the URL?

By default qeury strings are included. You may ignore them using  
something  
like this:

```
proxy_cache_key $host/$uri";

```

The default proxy\_cache\_key approximates

```
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

```

> 1. How scalable is this system? Could it handle 50 million different  
> URIs for instance?

Each key takes 128 bytes in shared memory zone. Therefore you need 6.1G  
zone:

key\_zone=NAME:6200m;

> 1. Any plans for purge capabilities somehow, in the event you need the  
> content flushed right away?

Yes, there are such plans.

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 9, 2009, 9:35pm UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/16 "2009-04-09T21:35:41Z")

</div>

Hi Igor (and everyone else),

I had a few quick questions about the new proxy\_cache feature, and I  
apologize if they have already been answered.

1. What about query\_strings? Does proxy\_cache ignore or include  
query\_strings? Is there a way to have it ignore query\_strings in the  
URL?
2. How scalable is this system? Could it handle 50 million different  
URIs for instance?
3. Any plans for purge capabilities somehow, in the event you need the  
content flushed right away?

Keep up the great work, thanks for making the world’s best server!

Thanks,

John

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 10, 2009, 5:21pm UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/17 "2009-04-10T17:21:09Z")

</div>

Thanks,

That helps me understand how hash tables work.

Question: Is this for proxy\_cache:  
Bugfix: now nginx takes into account the “X-Accel-Expires”, “Expires”,  
and  
“Cache-Control” header lines in a backend response.

Or are files always cached for time specified in proxy\_cache\_valid?

Purging would be amazing, that way I could set proxy\_cache\_valid to a  
day or  
more, and know that if a change was made I could just issue a purge for  
that  
specific key, or key path.

Any plans for nginx to manage the cache by doing a HEAD request looking  
for  
changed content automatically on the origin at certain intervals?

Thanks!

John

2009/4/10 Igor S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 11, 2009, 3:57am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/18 "2009-04-11T03:57:15Z")

</div>

æ±‰è¯­èƒ½çœ‹æ‡‚ä¸ï¼Ÿ

Posted at Nginx Forum: [Re: nginx + caching of static files](http://forum.nginx.org/read.php?2,869,959#msg-959)

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [April 11, 2009, 6:00am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/19 "2009-04-11T06:00:34Z")

</div>

On Fri, Apr 10, 2009 at 04:48:25AM -0400, yangguangli wrote:

> ???

No.

---

<div class="post-metadata">

**Author:** ![Payam\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/59ef9b/32.png) [@Payam\_C](https://www.ruby-forum.com/u/Payam_C)\
**Post date:** [May 27, 2009, 3:30am UTC](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897/20 "2009-05-27T03:30:34Z")

</div>

æˆ‘èƒ½çœ‹æ‡‚ æ±‰è¯­å“ˆå“ˆå“ˆ

I can read chineseï¼

Posted at Nginx Forum:

> **[Re: Re: nginx + caching of static files](https://forum.nginx.org/read.php?2,869,2375#msg-2375)**
>
> Hi Guys, I was hoping someone could point out a document where it can teach me how to setup nginx + caching. I know that traditionally nginx did not have a native caching and it required you to run ncache or cachemem in order to perform caching of...

[Next page](https://www.ruby-forum.com/t/nginx-caching-of-static-files/164897.md?page=2)
