diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c
index 519b70eef5..aa76ab9502 100644
--- a/modules/proxy/mod_proxy.c
+++ b/modules/proxy/mod_proxy.c
@@ -1449,7 +1449,7 @@ static const char *
elts = (const apr_table_entry_t *)arr->elts;
/* Distinguish the balancer from worker */
if (ap_proxy_valid_balancer_name(r, 9)) {
- proxy_balancer *balancer = ap_proxy_get_balancer(cmd->pool, conf, r);
+ proxy_balancer *balancer = ap_proxy_get_balancer(cmd->pool, conf, r, 0);
if (!balancer) {
const char *err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, r, f, 0);
if (err)
@@ -1905,7 +1905,7 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg)
ap_str_tolower(path); /* lowercase scheme://hostname */
/* Try to find the balancer */
- balancer = ap_proxy_get_balancer(cmd->temp_pool, conf, path);
+ balancer = ap_proxy_get_balancer(cmd->temp_pool, conf, path, 0);
if (!balancer) {
err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, path, "/", 0);
if (err)
@@ -1985,7 +1985,7 @@ static const char *
}
if (ap_proxy_valid_balancer_name(name, 9)) {
- balancer = ap_proxy_get_balancer(cmd->pool, conf, name);
+ balancer = ap_proxy_get_balancer(cmd->pool, conf, name, 0);
if (!balancer) {
if (in_proxy_section) {
err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, name, "/", 0);
@@ -2134,7 +2134,7 @@ static const char *proxysection(cmd_parms *cmd, void *mconfig, const char *arg)
"> arguments are not supported for non url.",
NULL);
if (ap_proxy_valid_balancer_name((char *)conf->p, 9)) {
- balancer = ap_proxy_get_balancer(cmd->pool, sconf, conf->p);
+ balancer = ap_proxy_get_balancer(cmd->pool, sconf, conf->p, 0);
if (!balancer) {
err = ap_proxy_define_balancer(cmd->pool, &balancer,
sconf, conf->p, "/", 0);
diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h
index 5d8b778ffd..236aa94ebd 100644
--- a/modules/proxy/mod_proxy.h
+++ b/modules/proxy/mod_proxy.h
@@ -639,11 +639,13 @@ PROXY_DECLARE(int) ap_proxy_valid_balancer_name(char *name, int i);
* @param p memory pool used for temporary storage while finding balancer
* @param conf current proxy server configuration
* @param url url to find the worker from; must have balancer:// prefix
+ * @param careactive true if we care if the balancer is active or not
* @return proxy_balancer or NULL if not found
*/
PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
proxy_server_conf *conf,
- const char *url);
+ const char *url,
+ int careactive);
/**
* Update the balancer's vhost related fields
diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c
index 83c365d109..cb4df557d8 100644
--- a/modules/proxy/mod_proxy_balancer.c
+++ b/modules/proxy/mod_proxy_balancer.c
@@ -452,7 +452,7 @@ static int proxy_balancer_pre_request(proxy_worker **worker,
* for balancer, because this is failover attempt.
*/
if (!*balancer &&
- !(*balancer = ap_proxy_get_balancer(r->pool, conf, *url)))
+ !(*balancer = ap_proxy_get_balancer(r->pool, conf, *url, 1)))
return DECLINED;
/* Step 2: Lock the LoadBalancer
@@ -951,7 +951,7 @@ static int balancer_handler(request_rec *r)
}
if ((name = apr_table_get(params, "b")))
bsel = ap_proxy_get_balancer(r->pool, conf,
- apr_pstrcat(r->pool, BALANCER_PREFIX, name, NULL));
+ apr_pstrcat(r->pool, BALANCER_PREFIX, name, NULL), 0);
if ((name = apr_table_get(params, "w"))) {
wsel = ap_proxy_get_worker(r->pool, bsel, conf, name);
@@ -1201,7 +1201,7 @@ static int balancer_handler(request_rec *r)
ap_rvputs(r, balancer->s->name, "\n", NULL);
ap_rputs("\n\n
"
"MaxMembers | StickySession | DisableFailover | Timeout | FailoverAttempts | Method | "
- "Path |
\n", r);
+ "Path | Active |
\n", r);
/* the below is a safe cast, since the number of slots total will
* never be more than max_workers, which is restricted to int */
ap_rprintf(r, "%d [%d Used] | \n", balancer->max_workers,
@@ -1230,6 +1230,8 @@ static int balancer_handler(request_rec *r)
ap_rvputs(r, balancer->s->vhost, " -> ", NULL);
}
ap_rvputs(r, balancer->s->vpath, "\n", NULL);
+ ap_rprintf(r, "%s | \n",
+ !balancer->s->inactive ? "Yes" : "No");
ap_rputs("
\n
", r);
ap_rputs("\n\n"
"Worker URL | "
diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c
index 6ae1253937..df3d6d9609 100644
--- a/modules/proxy/proxy_util.c
+++ b/modules/proxy/proxy_util.c
@@ -1091,7 +1091,7 @@ PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r,
* to find which member actually handled this request.
*/
if (ap_proxy_valid_balancer_name((char *)real, 0) &&
- (balancer = ap_proxy_get_balancer(r->pool, sconf, real))) {
+ (balancer = ap_proxy_get_balancer(r->pool, sconf, real, 1))) {
int n, l3 = 0;
proxy_worker **worker = (proxy_worker **)balancer->workers->elts;
const char *urlpart = ap_strchr_c(real, '/');
@@ -1292,7 +1292,8 @@ PROXY_DECLARE(int) ap_proxy_valid_balancer_name(char *name, int i)
PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
proxy_server_conf *conf,
- const char *url)
+ const char *url,
+ int care)
{
proxy_balancer *balancer;
char *c, *uri = apr_pstrdup(p, url);
@@ -1309,7 +1310,9 @@ PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
balancer = (proxy_balancer *)conf->balancers->elts;
for (i = 0; i < conf->balancers->nelts; i++) {
if (strcasecmp(balancer->s->name, uri) == 0) {
- return balancer;
+ if (!care || !balancer->s->inactive) {
+ return balancer;
+ }
}
balancer++;
}