Change blank uwsgi_cache_key default, or log warning

Maxim Dounin mdounin at mdounin.ru
Wed Sep 10 17:49:00 UTC 2014


Hello!

On Tue, Sep 09, 2014 at 02:25:15PM -0400, gthb wrote:

> Hello,
> 
> Because uwsgi_cache_key has no default value (or rather, has the empty
> string as its default value), a configuration with uwsgi_cache set but
> uwsgi_cache_key not set behaves in a way that is very unlikely to be
> desired: Nginx caches the first publicly cacheable response it gets from
> upstream (for any request), and serves that cached response to *any* request
> mapping to the same location. The internals of that can be seen in the debug
> log, where the cache key is empty for all requests:
> 
> 2014/09/09 17:41:02 [debug] 91211#0: *13 http cache key: ""
> 
> This is in contrast to a configuration with proxy_cache enabled but
> proxy_cache_key not set; that behaves OK because proxy_cache_key has a
> useful default.
> 
> Because of the *general* correspondence between the http_proxy and
> http_uwsgi modules, it's easy to fall into this trap, defining uwsgi_cache
> but not uwsgi_cache_key. When that happens, and unexpected responses start
> coming back, the first place one looks is error.log, and there's nothing
> there.
> 
> To get rid of this gotcha, I suggest either:
> 
> 1. log a warning whenever a location/server/http block has uwsgi_cache set
> but no uwsgi_cache_key set.

Yes, this is mostly trivial and certainly makes sense.
Patch below.

# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1410371072 -14400
#      Wed Sep 10 21:44:32 2014 +0400
# Node ID bc4ee0b7cf2643fdcea310638302b9cadc7ac939
# Parent  aaa82dc56c9460db1b4233fc1d4559fdd07ff7ed
Added warning about unset cache keys.

In fastcgi, scgi and uwsgi modules there are no default cache keys, and
using a cache without a cache key set is likely meaningless.

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
@@ -2582,6 +2582,11 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf
         conf->cache_key = prev->cache_key;
     }
 
+    if (conf->upstream.cache && conf->cache_key.value.data == NULL) {
+        ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+                           "no \"fastcgi_cache_key\" for \"fastcgi_cache\"");
+    }
+
     ngx_conf_merge_value(conf->upstream.cache_lock,
                               prev->upstream.cache_lock, 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
@@ -1337,6 +1337,11 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t 
         conf->cache_key = prev->cache_key;
     }
 
+    if (conf->upstream.cache && conf->cache_key.value.data == NULL) {
+        ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+                           "no \"scgi_cache_key\" for \"scgi_cache\"");
+    }
+
     ngx_conf_merge_value(conf->upstream.cache_lock,
                               prev->upstream.cache_lock, 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
@@ -1524,6 +1524,11 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t
         conf->cache_key = prev->cache_key;
     }
 
+    if (conf->upstream.cache && conf->cache_key.value.data == NULL) {
+        ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+                           "no \"uwsgi_cache_key\" for \"uwsgi_cache\"");
+    }
+
     ngx_conf_merge_value(conf->upstream.cache_lock,
                               prev->upstream.cache_lock, 0);
 

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list