[nginx] Upstream: inheritance of proxy_pass and friends (ticket ...
Maxim Dounin
mdounin at mdounin.ru
Tue Dec 9 15:53:36 UTC 2014
details: http://hg.nginx.org/nginx/rev/5b9f711dc819
branches:
changeset: 5937:5b9f711dc819
user: Maxim Dounin <mdounin at mdounin.ru>
date: Tue Dec 09 18:21:55 2014 +0300
description:
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.
diffstat:
src/http/modules/ngx_http_fastcgi_module.c | 5 +----
src/http/modules/ngx_http_proxy_module.c | 16 ++++++----------
src/http/modules/ngx_http_scgi_module.c | 5 +----
src/http/modules/ngx_http_uwsgi_module.c | 14 ++++++--------
4 files changed, 14 insertions(+), 26 deletions(-)
diffs (103 lines):
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
@@ -2697,11 +2697,8 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf
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
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -2968,12 +2968,6 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t
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
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
--- a/src/http/modules/ngx_http_scgi_module.c
+++ b/src/http/modules/ngx_http_scgi_module.c
@@ -1443,11 +1443,8 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t
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
--- a/src/http/modules/ngx_http_uwsgi_module.c
+++ b/src/http/modules/ngx_http_uwsgi_module.c
@@ -1683,10 +1683,6 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t
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
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) {
More information about the nginx-devel
mailing list