16 февраля 2012, 14:08 от Maxim Dounin <mdounin@mdounin.ru>:
> On Thu, Feb 16, 2012 at 01:08:58PM +0400, Max wrote:
> > the value of the NGX_HTTP_CACHE_SCARCE cache status is defined in
> > nginx-1.1.15/src/http/ngx_http_cache.h, but unlike the other cache
> > status strings, it's missing from
> nginx-1.1.15/src/http/ngx_http_file_cache.c.
> >
> > The function ngx_http_upstream_cache_status() in
> > nginx-1.1.15/src/http/ngx_http_upstream.c references the status
> > strings directly as ngx_http_cache_status[n].len, so with the
> > SCARCE cache status string missing, this is a segmentation violation
> > waiting to happen.
> >
> > Here's the patch to fix the problem:
> >
> > <patch>
> > --- src/http/ngx_http_file_cache.c.orig 2012-02-16 00:18:21.000000000 -0800
> > +++ src/http/ngx_http_file_cache.c 2012-02-16 00:25:00.000000000 -0800
> > @@ -53,7 +53,8 @@
> > ngx_string("EXPIRED"),
> > ngx_string("STALE"),
> > ngx_string("UPDATING"),
> > - ngx_string("HIT")
> > + ngx_string("HIT"),
> > + ngx_string("SCARCE")
> > };
> > ---</patch>
>
> The NGX_HTTP_CACHE_SCARCE value can't appear in u->cache_status,
> and hence there is no real problem. It's a special value used by
> cache to inform upstream that there is no cached response (i.e.
> MISS cache status) and cacheing should be enabled due to min_uses
> preventing it.
You mean DISABLED due to file cache node exists being 0 or min_uses
being set too high?
nginx-1.1.15/src/http/ngx_http_upstream.c:
652 ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
653 {
...
719 rc = ngx_http_file_cache_open(r);
...
742 switch (rc) {
...
774 case NGX_HTTP_CACHE_SCARCE:
775
776 u->cacheable = 0;
777
778 break;
...
795 }
800 }
Max
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx