Index: docs/manual/mod/mod_proxy.xml =================================================================== --- docs/manual/mod/mod_proxy.xml (Revision 1386723) +++ docs/manual/mod/mod_proxy.xml (Arbeitskopie) @@ -1060,6 +1060,12 @@ and url encoded id (like servlet containers) use | to to separate them. The first part is for the cookie the second for the path. +
On
the semi-colon character ';' will be
Index: modules/proxy/mod_proxy_balancer.c
===================================================================
--- modules/proxy/mod_proxy_balancer.c (Revision 1386723)
+++ modules/proxy/mod_proxy_balancer.c (Arbeitskopie)
@@ -296,7 +296,7 @@
* If we found a value for sticksession, find the first '.' within.
* Everything after '.' (if present) is our route.
*/
- if ((*route) && ((*route = strchr(*route, '.')) != NULL ))
+ if ((*route) && (balancer->s->sticky_separator != 0) && ((*route = strchr(*route, balancer->s->sticky_separator)) != NULL ))
(*route)++;
if ((*route) && (**route)) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01161) "Found route %s", *route);
Index: modules/proxy/proxy_util.c
===================================================================
--- modules/proxy/proxy_util.c (Revision 1386723)
+++ modules/proxy/proxy_util.c (Arbeitskopie)
@@ -1180,6 +1180,8 @@
(*balancer)->hash = bshared->hash;
bshared->forcerecovery = 1;
+
+ bshared->sticky_separator = '.';
/* Retrieve a UUID and store the nonce for the lifetime of
* the process. */
Index: modules/proxy/mod_proxy.c
===================================================================
--- modules/proxy/mod_proxy.c (Revision 1386723)
+++ modules/proxy/mod_proxy.c (Arbeitskopie)
@@ -287,6 +287,19 @@
PROXY_STRNCPY(balancer->s->sticky_path, path);
}
}
+ else if (!strcasecmp(key, "sessionsep")) {
+ /* separator/delimiter for sessionid and route,
+ * normally '.'
+ */
+ if (strlen(val) != 1) {
+ if (!strcasecmp(val, "off"))
+ balancer->s->sticky_separator = 0;
+ else
+ return "sessionsep must be a single character or OFF";
+ }
+ else
+ balancer->s->sticky_separator = *val;
+ }
else if (!strcasecmp(key, "nofailover")) {
/* If set to 'on' the session will break
* if the worker is in error state or
Index: modules/proxy/mod_proxy.h
===================================================================
--- modules/proxy/mod_proxy.h (Revision 1386723)
+++ modules/proxy/mod_proxy.h (Arbeitskopie)
@@ -406,6 +406,7 @@
typedef struct {
char sticky_path[PROXY_BALANCER_MAX_STICKY_SIZE]; /* URL sticky session identifier */
char sticky[PROXY_BALANCER_MAX_STICKY_SIZE]; /* sticky session identifier */
+ char sticky_separator; /* separator for sessionid/route */
char lbpname[PROXY_MAX_PROVIDER_NAME_SIZE]; /* lbmethod provider name */
char nonce[APR_UUID_FORMATTED_LENGTH + 1];
char name[PROXY_BALANCER_MAX_NAME_SIZE];