Ruediger Pluem wrote:
-        for (i = 0; i < arr->nelts; i++) {
-            const char *err = set_balancer_param(conf, cmd->pool, balancer, 
elts[i].key,
-                                                 elts[i].val);
+        else {
+            if (params->nelts > 0 &&
+                  (balancer->sticky || balancer->sticky_force ||
+                   balancer->max_attempts_set || balancer->timeout)) {
+                ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
+                         "repeated parameter definition for balancer %s "
+                         "overwrites previous definitions",
+                         balancer->name);
+                balancer->sticky = NULL;

Why resetting balancer->sticky here? It is not clear that the contents of
balancer->sticky is changed. It makes sense to reset it if we have at least
one "stickysession" parameter inside of params->elts so that we cleanly
overwrite all the "stickysession" stuff then.
What makes me a bit lost is the following configuration situation:

You declare a balancer:

<Proxy balancer://mycloud>
 BalancerMember ajp://192.168.1.1:5001 route=member1
 BalancerMember ajp://192.168.1.2:5001 route=member2
</Proxy>

Now I want to balance 2 paths:

<Location /app1>
 ProxyPass balancer://mycloud/app1 stickysession=JSESSION
</Location>

<Location /app2>
 ProxyPass balancer://mycloud/app2 stickysession=JSESSION
</Location>

The repeated ProxyPass definitions might give the impression that you can specify different settings for /app1 and /app2 - e.g. stickysession parameters (which is not true).

Using an elegant:

<LocationMatch "/(app1|app2)">

is also not possible if the path element (/app1 vs /app2) has to be passed to the backend.

I am missing an elegant solution for mapping multiple paths to the same balancer.

Did I miss something here?

Best regards,


Georg

Reply via email to