Upstream: mutually exclusive inheritance of "cache" and "store".

Currently, storing and caching mechanisms cannot work together, and a
configuration error is thrown when the proxy_store and proxy_cache
directives (as well as their friends) are configured on the same level.

But configurations like in the example below were allowed and could result
in critical errors in the error log:

    proxy_store on;

    location / {
        proxy_cache one;
    }

Only proxy_store worked in this case.

For more predictable and errorless behavior these directives now prevent
each other from being inherited from the previous level.
pull/6/head
Valentin Bartenev 11 years ago
parent 492844dbb1
commit 66dcbab7a1
  1. 14
      src/http/modules/ngx_http_fastcgi_module.c
  2. 14
      src/http/modules/ngx_http_proxy_module.c
  3. 14
      src/http/modules/ngx_http_scgi_module.c
  4. 14
      src/http/modules/ngx_http_uwsgi_module.c

@ -2432,6 +2432,20 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_hash_init_t hash;
ngx_http_core_loc_conf_t *clcf;
#if (NGX_HTTP_CACHE)
if (conf->upstream.store > 0) {
conf->upstream.cache = NULL;
}
if (conf->upstream.cache != NGX_CONF_UNSET_PTR
&& conf->upstream.cache != NULL)
{
conf->upstream.store = 0;
}
#endif
if (conf->upstream.store == NGX_CONF_UNSET) {
ngx_conf_merge_value(conf->upstream.store,
prev->upstream.store, 0);

@ -2624,6 +2624,20 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_http_proxy_rewrite_t *pr;
ngx_http_script_compile_t sc;
#if (NGX_HTTP_CACHE)
if (conf->upstream.store > 0) {
conf->upstream.cache = NULL;
}
if (conf->upstream.cache != NGX_CONF_UNSET_PTR
&& conf->upstream.cache != NULL)
{
conf->upstream.store = 0;
}
#endif
if (conf->upstream.store == NGX_CONF_UNSET) {
ngx_conf_merge_value(conf->upstream.store,
prev->upstream.store, 0);

@ -1186,6 +1186,20 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_hash_init_t hash;
ngx_http_core_loc_conf_t *clcf;
#if (NGX_HTTP_CACHE)
if (conf->upstream.store > 0) {
conf->upstream.cache = NULL;
}
if (conf->upstream.cache != NGX_CONF_UNSET_PTR
&& conf->upstream.cache != NULL)
{
conf->upstream.store = 0;
}
#endif
if (conf->upstream.store == NGX_CONF_UNSET) {
ngx_conf_merge_value(conf->upstream.store, prev->upstream.store, 0);

@ -1400,6 +1400,20 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_hash_init_t hash;
ngx_http_core_loc_conf_t *clcf;
#if (NGX_HTTP_CACHE)
if (conf->upstream.store > 0) {
conf->upstream.cache = NULL;
}
if (conf->upstream.cache != NGX_CONF_UNSET_PTR
&& conf->upstream.cache != NULL)
{
conf->upstream.store = 0;
}
#endif
if (conf->upstream.store == NGX_CONF_UNSET) {
ngx_conf_merge_value(conf->upstream.store, prev->upstream.store, 0);

Loading…
Cancel
Save