diff src/http/modules/ngx_http_uwsgi_module.c @ 5938:cd2abf7e7740

Upstream: fixed unexpected inheritance into limit_except blocks. The proxy_pass directive and other handlers are not expected to be inherited into nested locations, but there is a special code to inherit upstream handlers into limit_except blocks, as well as a configuration into if{} blocks. This caused incorrect behaviour in configurations with nested locations and limit_except blocks, like this: location / { proxy_pass http://u; location /inner/ { # no proxy_pass here limit_except GET { # nothing } } } In such a configuration the limit_except block inside "location /inner/" unexpectedly used proxy_pass defined in "location /", while it shouldn't. Fix is to avoid inheritance of conf->upstream.upstream (and conf->proxy_lengths) into locations which don't have noname flag.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 09 Dec 2014 18:22:31 +0300
parents 5b9f711dc819
children e3b3b89d74e8
line wrap: on
line diff
--- a/src/http/modules/ngx_http_uwsgi_module.c
+++ b/src/http/modules/ngx_http_uwsgi_module.c
@@ -1698,7 +1698,11 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t
         return NGX_CONF_ERROR;
     }
 
-    if (conf->upstream.upstream == NULL && conf->uwsgi_lengths == NULL) {
+    clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
+
+    if (clcf->noname
+        && conf->upstream.upstream == NULL && conf->uwsgi_lengths == NULL)
+    {
         conf->upstream.upstream = prev->upstream.upstream;
 
         conf->uwsgi_lengths = prev->uwsgi_lengths;
@@ -1709,11 +1713,10 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t
 #endif
     }
 
-    if (conf->upstream.upstream || conf->uwsgi_lengths) {
-        clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
-        if (clcf->handler == NULL && clcf->lmt_excpt) {
-            clcf->handler = ngx_http_uwsgi_handler;
-        }
+    if (clcf->lmt_excpt && clcf->handler == NULL
+        && (conf->upstream.upstream || conf->uwsgi_lengths))
+    {
+        clcf->handler = ngx_http_uwsgi_handler;
     }
 
     ngx_conf_merge_uint_value(conf->modifier1, prev->modifier1, 0);