* Ensure that at least scheme://hostname[:port] matches between worker and URL
when trying to find the worker that fits best to the given URL.
PR: 40910
Submitted by: rpluem
Reviewed by: rpluem, jim, fielding
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@572420
13f79535-47bb-0310-9956-
ffa450edef68
-*- coding: utf-8 -*-
Changes with Apache 2.2.6
+ *) mod_proxy: Ensure that at least scheme://hostname[:port] matches between
+ worker and URL when searching for the best fitting worker for a given URL.
+ PR 40910 [Ruediger Pluem]
+
*) mod_proxy: Improve network performance by setting APR_TCP_NODELAY
(disable Nagle algorithm) on sockets if implemented.
PR 42871 [Christian BOITEL <christian_boitel yahoo.fr>, Jim Jagielski]
*) core: Do not replace a Date header set by a proxied backend server.
- PR 40232. [Ruediger Pluem]
+ PR 40232 [Ruediger Pluem]
*) mod_proxy: Add a missing assignment in an error checking code path.
- PR 40865. [Andrew Rucker Jones <arjones simultan.dyndns.org>]
+ PR 40865 [Andrew Rucker Jones <arjones simultan.dyndns.org>]
*) mod_proxy_connect: avoid segfault on DNS lookup failure.
PR 40756 [Trevin Beattie <tbeattie boingo.com>]
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_proxy: Ensure that at least scheme://hostname[:port] matches
- between worker and URL when trying to find the worker that fits best to
- the given URL. PR 40910.
- Trunk version of patch:
- http://svn.apache.org/viewcvs.cgi?rev=481901&view=rev
- Backport version for 2.2.x of patch:
- Trunk version of patch works
- +1: rpluem, jim, fielding
-
* mod_proxy_http: make proxy-sendchunked work as documented.
PR 43183
Trunk version of patch:
proxy_worker *max_worker = NULL;
int max_match = 0;
int url_length;
+ int min_match;
int worker_name_length;
const char *c;
char *url_copy;
pathstart = url_copy + (c - url);
*pathstart = '\0';
ap_str_tolower(url_copy);
+ min_match = strlen(url_copy);
*pathstart = '/';
}
else {
ap_str_tolower(url_copy);
+ min_match = strlen(url_copy);
}
worker = (proxy_worker *)conf->workers->elts;
/*
* Do a "longest match" on the worker name to find the worker that
- * fits best to the URL.
+ * fits best to the URL, but keep in mind that we must have at least
+ * a minimum matching of length min_match such that
+ * scheme://hostname[:port] matches between worker and url.
*/
for (i = 0; i < conf->workers->nelts; i++) {
if ( ((worker_name_length = strlen(worker->name)) <= url_length)
+ && (worker_name_length >= min_match)
&& (worker_name_length > max_match)
&& (strncmp(url_copy, worker->name, worker_name_length) == 0) ) {
max_worker = worker;