Upstream: inheritance of proxy_pass and friends (ticket #645).

Instead of independant inheritance of conf->upstream.upstream (proxy_pass
without variables) and conf->proxy_lengths (proxy_pass with variables)
we now test them both and inherit only if neither is set.  Additionally,
SSL context is also inherited only in this case now.

Based on the patch by Alexey Radkov.
This commit is contained in:
Maxim Dounin 2014-12-09 18:21:55 +03:00
parent 88ed2d39af
commit c863e1b3b5
4 changed files with 12 additions and 24 deletions

View File

@ -2697,11 +2697,8 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
return NGX_CONF_ERROR;
}
if (conf->upstream.upstream == NULL) {
if (conf->upstream.upstream == NULL && conf->fastcgi_lengths == NULL) {
conf->upstream.upstream = prev->upstream.upstream;
}
if (conf->fastcgi_lengths == NULL) {
conf->fastcgi_lengths = prev->fastcgi_lengths;
conf->fastcgi_values = prev->fastcgi_values;
}

View File

@ -2968,12 +2968,6 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_ptr_value(conf->cookie_paths, prev->cookie_paths, NULL);
#if (NGX_HTTP_SSL)
if (conf->upstream.ssl == NULL) {
conf->upstream.ssl = prev->upstream.ssl;
}
#endif
ngx_conf_merge_uint_value(conf->http_version, prev->http_version,
NGX_HTTP_VERSION_10);
@ -2997,14 +2991,16 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
return NGX_CONF_ERROR;
}
if (conf->upstream.upstream == NULL) {
if (conf->upstream.upstream == NULL && conf->proxy_lengths == NULL) {
conf->upstream.upstream = prev->upstream.upstream;
conf->vars = prev->vars;
}
if (conf->proxy_lengths == NULL) {
conf->proxy_lengths = prev->proxy_lengths;
conf->proxy_values = prev->proxy_values;
#if (NGX_HTTP_SSL)
conf->upstream.ssl = prev->upstream.ssl;
#endif
}
if (conf->upstream.upstream || conf->proxy_lengths) {

View File

@ -1443,11 +1443,8 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
return NGX_CONF_ERROR;
}
if (conf->upstream.upstream == NULL) {
if (conf->upstream.upstream == NULL && conf->scgi_lengths == NULL) {
conf->upstream.upstream = prev->upstream.upstream;
}
if (conf->scgi_lengths == NULL) {
conf->scgi_lengths = prev->scgi_lengths;
conf->scgi_values = prev->scgi_values;
}

View File

@ -1683,10 +1683,6 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
return NGX_CONF_ERROR;
}
if (conf->upstream.ssl == NULL) {
conf->upstream.ssl = prev->upstream.ssl;
}
#endif
ngx_conf_merge_str_value(conf->uwsgi_string, prev->uwsgi_string, "");
@ -1702,13 +1698,15 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
return NGX_CONF_ERROR;
}
if (conf->upstream.upstream == NULL) {
if (conf->upstream.upstream == NULL && conf->uwsgi_lengths == NULL) {
conf->upstream.upstream = prev->upstream.upstream;
}
if (conf->uwsgi_lengths == NULL) {
conf->uwsgi_lengths = prev->uwsgi_lengths;
conf->uwsgi_values = prev->uwsgi_values;
#if (NGX_HTTP_SSL)
conf->upstream.ssl = prev->upstream.ssl;
#endif
}
if (conf->upstream.upstream || conf->uwsgi_lengths) {