]> git.kaiwu.me - nginx.git/commitdiff
Upstream: inheritance of proxy_pass and friends (ticket #645).
authorMaxim Dounin <mdounin@mdounin.ru>
Tue, 9 Dec 2014 15:21:55 +0000 (18:21 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Tue, 9 Dec 2014 15:21:55 +0000 (18:21 +0300)
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.

src/http/modules/ngx_http_fastcgi_module.c
src/http/modules/ngx_http_proxy_module.c
src/http/modules/ngx_http_scgi_module.c
src/http/modules/ngx_http_uwsgi_module.c

index cc93570b1dbc08ef54760a05045fa0c314a59a7b..2ab40fbfdfde978e447ef3e847addf3112ef26ed 100644 (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;
     }
index 78961babdddbaa9e89ca4cde318d5d27b098ca8c..9ac86c003ec2599946a8f190f5a8457233436064 100644 (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) {
index 53a90d99a599561ce35c64696327775f213d659e..49735bfde30e4313f0d12fbecb8a7c6aeb7f4573 100644 (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;
     }
index d12fbdf7b3418ce69260a9c4989749c8ba2c4b9a..0dbcbf16a339bbe537a8655d555be79c7e4f62ee 100644 (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) {