You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2012/11/01 17:06:44 UTC
svn commit: r1404653 - in /httpd/httpd/trunk: CHANGES
docs/manual/mod/mod_proxy.xml include/ap_mmn.h modules/proxy/mod_proxy.c
modules/proxy/mod_proxy.h modules/proxy/mod_proxy_balancer.c
modules/proxy/proxy_util.c
Author: jim
Date: Thu Nov 1 16:06:43 2012
New Revision: 1404653
URL: http://svn.apache.org/viewvc?rev=1404653&view=rev
Log:
Allow for setting of sticky session split char...
Bugz 53893
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/docs/manual/mod/mod_proxy.xml
httpd/httpd/trunk/include/ap_mmn.h
httpd/httpd/trunk/modules/proxy/mod_proxy.c
httpd/httpd/trunk/modules/proxy/mod_proxy.h
httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c
httpd/httpd/trunk/modules/proxy/proxy_util.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Thu Nov 1 16:06:43 2012
@@ -1,8 +1,11 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mod_proxy: Add ability to configure the sticky session separator.
+ PR 53893. [<inu inusasha de>, Jim Jagielski]
+
*) mod_proxy_ftp: Fix segfaults on IPv4 requests to hosts with DNS AAAA records.
- PR 40841. [Andrew Rucker Jones <arjones simultan dyndns org>,
+ PR 40841. [Andrew Rucker Jones <arjones simultan dyndns org>,
<ast domdv de>, Jim Jagielski]
*) ap_expr: Add req_novary function that allows HTTP header lookups
Modified: httpd/httpd/trunk/docs/manual/mod/mod_proxy.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_proxy.xml?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_proxy.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_proxy.xml Thu Nov 1 16:06:43 2012
@@ -1092,6 +1092,13 @@ ProxyPass /mirror/foo http://backend.exa
and url encoded id (like servlet containers) use | to to separate them.
The first part is for the cookie the second for the path.
</td></tr>
+ <tr><td>stickysessionsep</td>
+ <td>"."</td>
+ <td>Sets the separation symbol in the session cookie. Some backend application servers
+ do not use the '.' as the symbol. For example the Oracle Weblogic server uses
+ '!'. The correct symbol can be set using this option. The setting of 'Off'
+ signifies that no symbol is used.
+ </td></tr>
<tr><td>scolonpathdelim</td>
<td>Off</td>
<td>If set to <code>On</code> the semi-colon character ';' will be
Modified: httpd/httpd/trunk/include/ap_mmn.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_mmn.h (original)
+++ httpd/httpd/trunk/include/ap_mmn.h Thu Nov 1 16:06:43 2012
@@ -403,6 +403,7 @@
* 20120724.3 (2.5.0-dev) Add bal_persist, inherit to proxy_server_conf
* 20120724.4 (2.5.0-dev) Add dirwalk_stat hook.
* 20120724.5 (2.5.0-dev) Add ap_get_sload() and ap_get_loadavg().
+ * 20120724.6 (2.5.0-dev) Add sticky_separator to proxy_balancer_shared struct.
*/
#define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
@@ -410,7 +411,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20120724
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 5 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 6 /* 0...n */
/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.c?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Thu Nov 1 16:06:43 2012
@@ -287,6 +287,19 @@ static const char *set_balancer_param(pr
PROXY_STRNCPY(balancer->s->sticky_path, path);
}
}
+ else if (!strcasecmp(key, "stickysessionsep")) {
+ /* separator/delimiter for sessionid and route,
+ * normally '.'
+ */
+ if (strlen(val) != 1) {
+ if (!strcasecmp(val, "off"))
+ balancer->s->sticky_separator = 0;
+ else
+ return "stickysessionsep 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
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.h?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Thu Nov 1 16:06:43 2012
@@ -419,6 +419,7 @@ typedef struct {
int max_attempts; /* Number of attempts before failing */
int index; /* shm array index */
proxy_hashes hash;
+ char sticky_separator; /* separator for sessionid/route */
unsigned int sticky_force:1; /* Disable failover for sticky sessions */
unsigned int scolonsep:1; /* true if ';' seps sticky session paths */
unsigned int max_attempts_set:1;
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c Thu Nov 1 16:06:43 2012
@@ -293,10 +293,11 @@ static proxy_worker *find_session_route(
}
}
/*
- * If we found a value for sticksession, find the first '.' within.
- * Everything after '.' (if present) is our route.
+ * If we found a value for stickysession, find the first '.' (or whatever
+ * sticky_separator is set to) 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);
Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/proxy_util.c?rev=1404653&r1=1404652&r2=1404653&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_util.c Thu Nov 1 16:06:43 2012
@@ -1182,6 +1182,7 @@ PROXY_DECLARE(char *) ap_proxy_define_ba
(*balancer)->hash = bshared->hash;
bshared->forcerecovery = 1;
+ bshared->sticky_separator = '.';
*bshared->nonce = PROXY_UNSET_NONCE; /* impossible valid input */
(*balancer)->s = bshared;