comparison src/http/modules/ngx_http_scgi_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
comparison
equal deleted inserted replaced
5937:5b9f711dc819 5938:cd2abf7e7740
1441 != NGX_OK) 1441 != NGX_OK)
1442 { 1442 {
1443 return NGX_CONF_ERROR; 1443 return NGX_CONF_ERROR;
1444 } 1444 }
1445 1445
1446 if (conf->upstream.upstream == NULL && conf->scgi_lengths == NULL) { 1446 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
1447
1448 if (clcf->noname
1449 && conf->upstream.upstream == NULL && conf->scgi_lengths == NULL)
1450 {
1447 conf->upstream.upstream = prev->upstream.upstream; 1451 conf->upstream.upstream = prev->upstream.upstream;
1448 conf->scgi_lengths = prev->scgi_lengths; 1452 conf->scgi_lengths = prev->scgi_lengths;
1449 conf->scgi_values = prev->scgi_values; 1453 conf->scgi_values = prev->scgi_values;
1450 } 1454 }
1451 1455
1452 if (conf->upstream.upstream || conf->scgi_lengths) { 1456 if (clcf->lmt_excpt && clcf->handler == NULL
1453 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module); 1457 && (conf->upstream.upstream || conf->scgi_lengths))
1454 if (clcf->handler == NULL && clcf->lmt_excpt) { 1458 {
1455 clcf->handler = ngx_http_scgi_handler; 1459 clcf->handler = ngx_http_scgi_handler;
1456 }
1457 } 1460 }
1458 1461
1459 if (conf->params_source == NULL) { 1462 if (conf->params_source == NULL) {
1460 conf->params = prev->params; 1463 conf->params = prev->params;
1461 #if (NGX_HTTP_CACHE) 1464 #if (NGX_HTTP_CACHE)