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.
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index cc93570..2ab40fb 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -2697,11 +2697,8 @@
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;
}
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index 78961ba..9ac86c0 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -2968,12 +2968,6 @@
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 @@
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) {
diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c
index 53a90d9..49735bf 100644
--- a/src/http/modules/ngx_http_scgi_module.c
+++ b/src/http/modules/ngx_http_scgi_module.c
@@ -1443,11 +1443,8 @@
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;
}
diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c
index d12fbdf..0dbcbf1 100644
--- a/src/http/modules/ngx_http_uwsgi_module.c
+++ b/src/http/modules/ngx_http_uwsgi_module.c
@@ -1683,10 +1683,6 @@
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 @@
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) {