From b360fcb2d2fad34e296a438fdc852ceb91f681a5 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Thu, 20 Sep 2012 13:41:45 +0000 Subject: [PATCH] OK, enable/allow previous broken, bad behavior iff the user really, really wants it. And warn that b-m isn't recommended in those cases. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1388029 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/mod/mod_proxy.xml | 15 ++++++++++++++ include/ap_mmn.h | 2 +- modules/proxy/mod_proxy.c | 37 ++++++++++++++++++++++++++++------- modules/proxy/mod_proxy.h | 1 + 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml index 4f8c820bdc..56def6edd0 100644 --- a/docs/manual/mod/mod_proxy.xml +++ b/docs/manual/mod/mod_proxy.xml @@ -665,6 +665,21 @@ expressions + + BalancerInherit + Inherit Balancers from the main server + BalancerInherit On|Off + BalancerInherit Off + server configvirtual host + BalancerInherit is only available in Apache HTTP Server 2.5.0 + and later. + +

This directive will cause the current server/vhost to "inherit" Balancers + defined in the main server. This can cause issues and inconsistent + behavior if using the Balancer Manager and so is disabled + by default.

+
+
BalancerMember diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 9c42f11b85..a39d86a00b 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -400,7 +400,7 @@ * 20120724.0 (2.5.0-dev) Add hostname argument to ap_proxy_checkproxyblock. * 20120724.1 (2.5.0-dev) Add post_perdir_config hook. * 20120724.2 (2.5.0-dev) Add fgrab slotmem function to struct - * 20120724.3 (2.5.0-dev) Add bal_persist to proxy_server_conf + * 20120724.3 (2.5.0-dev) Add bal_persist, inherit to proxy_server_conf */ #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */ diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index ee07727531..3ac3e3c4a1 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1173,13 +1173,24 @@ static void * merge_proxy_config(apr_pool_t *p, void *basev, void *overridesv) proxy_server_conf *base = (proxy_server_conf *) basev; proxy_server_conf *overrides = (proxy_server_conf *) overridesv; - ps->proxies = overrides->proxies; - ps->sec_proxy = overrides->sec_proxy; - ps->aliases = overrides->aliases; - ps->noproxies = overrides->noproxies; - ps->dirconn = overrides->dirconn; - ps->workers = overrides->workers; - ps->balancers = overrides->balancers; + if (overrides->inherit || base->inherit) { + ps->proxies = apr_array_append(p, base->proxies, overrides->proxies); + ps->sec_proxy = apr_array_append(p, base->sec_proxy, overrides->sec_proxy); + ps->aliases = apr_array_append(p, base->aliases, overrides->aliases); + ps->noproxies = apr_array_append(p, base->noproxies, overrides->noproxies); + ps->dirconn = apr_array_append(p, base->dirconn, overrides->dirconn); + ps->workers = apr_array_append(p, base->workers, overrides->workers); + ps->balancers = apr_array_append(p, base->balancers, overrides->balancers); + } + else { + ps->proxies = overrides->proxies; + ps->sec_proxy = overrides->sec_proxy; + ps->aliases = overrides->aliases; + ps->noproxies = overrides->noproxies; + ps->dirconn = overrides->dirconn; + ps->workers = overrides->workers; + ps->balancers = overrides->balancers; + } ps->forward = overrides->forward ? overrides->forward : base->forward; ps->reverse = overrides->reverse ? overrides->reverse : base->reverse; @@ -1877,6 +1888,15 @@ static const char *set_persist(cmd_parms *parms, void *dummy, int flag) return NULL; } +static const char *set_inherit(cmd_parms *parms, void *dummy, int flag) +{ + proxy_server_conf *psf = + ap_get_module_config(parms->server->module_config, &proxy_module); + + psf->inherit = flag; + return NULL; +} + static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) { server_rec *s = cmd->server; @@ -2266,6 +2286,9 @@ static const command_rec proxy_cmds[] = "Number of additional Balancers that can be added post-config"), AP_INIT_FLAG("BalancerPersist", set_persist, NULL, RSRC_CONF, "on if the balancer should persist changes on reboot/restart made via the Balancer Manager"), + AP_INIT_FLAG("BalancerInherit", set_persist, NULL, RSRC_CONF, + "on if this server should inherit Balancers defined in the main server " + "(Not recommended if using the Balancer Manager)"), AP_INIT_TAKE1("ProxyStatus", set_status_opt, NULL, RSRC_CONF, "Configure Status: proxy status to one of: on | off | full"), AP_INIT_RAW_ARGS("ProxySet", set_proxy_param, NULL, RSRC_CONF|ACCESS_CONF, diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index f1b64d6daa..9fd18d8f18 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -179,6 +179,7 @@ typedef struct { unsigned int source_address_set:1; unsigned int bgrowth_set:1; unsigned int bal_persist:1; + unsigned int inherit:1; } proxy_server_conf; -- 2.40.0