From e36237899d56fb457f43735b75e085ec3c320ecc Mon Sep 17 00:00:00 2001 From: Ruediger Pluem Date: Wed, 16 Apr 2025 11:29:25 +0000 Subject: [PATCH] * Temporarily add back the query string to the URL as it might contain the routing information for sticky sessions. PR: 69443 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1925109 13f79535-47bb-0310-9956-ffa450edef68 --- changes-entries/pr69443.txt | 3 +++ modules/proxy/mod_proxy_balancer.c | 14 +++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 changes-entries/pr69443.txt diff --git a/changes-entries/pr69443.txt b/changes-entries/pr69443.txt new file mode 100644 index 0000000000..97de769393 --- /dev/null +++ b/changes-entries/pr69443.txt @@ -0,0 +1,3 @@ + *) mod_proxy_balancer: Fix a regression that caused stickysession keys no + longer be recognized if they are provided as query parameter in the URL. + PR 69443 [Ruediger Pluem] diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index 984c61f016..4fc2024b90 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -274,11 +274,23 @@ static proxy_worker *find_session_route(proxy_balancer *balancer, char **url) { proxy_worker *worker = NULL; + char *url_with_qs; if (!*balancer->s->sticky) return NULL; + /* + * The route might be contained in the query string and *url is not + * supposed to contain the query string. Hence add it temporarily if + * present. + */ + if (r->args) { + url_with_qs = apr_pstrcat(r->pool, *url, "?", r->args, NULL); + } + else { + url_with_qs = *url; + } /* Try to find the sticky route inside url */ - *route = get_path_param(r->pool, *url, balancer->s->sticky_path, balancer->s->scolonsep); + *route = get_path_param(r->pool, url_with_qs, balancer->s->sticky_path, balancer->s->scolonsep); if (*route) { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01159) "Found value %s for stickysession %s", -- 2.47.3