changeset 5948:f2ff0aa89126

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.
author Valentin Bartenev <vbart@nginx.com>
date Mon, 22 Dec 2014 12:58:59 +0300
parents d9025ea1f5a5
children 634da79665d3
files src/http/modules/ngx_http_fastcgi_module.c src/http/modules/ngx_http_proxy_module.c src/http/modules/ngx_http_scgi_module.c src/http/modules/ngx_http_uwsgi_module.c
diffstat 4 files changed, 56 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/modules/ngx_http_fastcgi_module.c	Mon Dec 22 12:58:56 2014 +0300
+++ b/src/http/modules/ngx_http_fastcgi_module.c	Mon Dec 22 12:58:59 2014 +0300
@@ -2432,6 +2432,20 @@
     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);
--- a/src/http/modules/ngx_http_proxy_module.c	Mon Dec 22 12:58:56 2014 +0300
+++ b/src/http/modules/ngx_http_proxy_module.c	Mon Dec 22 12:58:59 2014 +0300
@@ -2624,6 +2624,20 @@
     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);
--- a/src/http/modules/ngx_http_scgi_module.c	Mon Dec 22 12:58:56 2014 +0300
+++ b/src/http/modules/ngx_http_scgi_module.c	Mon Dec 22 12:58:59 2014 +0300
@@ -1186,6 +1186,20 @@
     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);
 
--- a/src/http/modules/ngx_http_uwsgi_module.c	Mon Dec 22 12:58:56 2014 +0300
+++ b/src/http/modules/ngx_http_uwsgi_module.c	Mon Dec 22 12:58:59 2014 +0300
@@ -1400,6 +1400,20 @@
     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);