# HG changeset patch # User Valentin Bartenev # Date 1419242339 -10800 # Node ID f2ff0aa891264a1b36ac97a3b54a7e41172bef49 # Parent d9025ea1f5a5011d19bfed8a4435f29a7f042572 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. diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c --- a/src/http/modules/ngx_http_fastcgi_module.c +++ b/src/http/modules/ngx_http_fastcgi_module.c @@ -2432,6 +2432,20 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf 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); diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c --- a/src/http/modules/ngx_http_proxy_module.c +++ b/src/http/modules/ngx_http_proxy_module.c @@ -2624,6 +2624,20 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t 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); diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c --- a/src/http/modules/ngx_http_scgi_module.c +++ b/src/http/modules/ngx_http_scgi_module.c @@ -1186,6 +1186,20 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t 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); diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c --- a/src/http/modules/ngx_http_uwsgi_module.c +++ b/src/http/modules/ngx_http_uwsgi_module.c @@ -1400,6 +1400,20 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t 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);