httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ruediger Pluem <rpl...@apache.org>
Subject Re: httpd-2.1.7 Connection-pooling Problem w/ ReverseProxy, Loadbalancer
Date Mon, 21 Nov 2005 21:44:41 GMT


On 11/21/2005 06:52 PM, Jim Jagielski wrote:
> Thanks for the report: You said that you tested against
> 2.1.10-HEAD right?
> 
> On Nov 21, 2005, at 10:25 AM, Hansjoerg Pehofer wrote:
> 
> Hi,
> 
> I briefly tried httpd-2.1.10 today and still see this.
> (Same httpd.conf, only changed ServerRoot to
> "/usr/local/apache2-2.1.10/")
> 
> kind regards
> Hansjörg
> 
> Hansjoerg Pehofer <hansjoerg.pehofer@uibk.ac.at> writes:
> 
>>>> Hi,
>>>>
>>>> I experienced Apache-2.1.7 (/w WorkerMPM on Solaris 9) connecting  to
>>>> the
>>>> wrong backends when having configured more than one balancer cluster.
>>>> (see httpd.conf below)
>>>> ErrorLog shows some odd entries (marked in the example below) during
>>>> proxy_util.c's ap_proxy_determine_connection().
>>>>
>>>> I could work around this behaviour by changing line 1788 of 
>>>> proxy_util.c
>>>>
>>>> - else if (!conn->hostname) {
>>>> + else if (!conn->hostname || strcmp(conn->hostname, uri- >hostname)
>>>> != 0) {
>>>>
>>>> This unlikely is a fix, however: I wonder if someone has seen this
>>>> behavior before and whether someone familiar with this modules can  hint
>>>> me where to look deeper into this.
>>>>
>>>> kind regards
>>>> Hansjörg

I think the real problem happens if you have requests to different backends (webapp-cluster,
axkit-cluster) on one
shared keepalive connection to the reverse proxy.

So having something like

GET /library/q
and
GET /anything

served over the same keepalive connection between client and reverse proxy should cause trouble,
because of

    if (!r->main) {
        backend = (proxy_conn_rec *) ap_get_module_config(c->conn_config,
                                                      &proxy_http_module);
    }

starting at line 1668 of mod_proxy_http.c which gets the previous backend
connection. Although the socket to the backend is closed for Reverse Proxy Requests
in ap_proxy_determine_connection of line 1856 of proxy_util.c, the new connection
gets created to the same address in line 2010 of proxy_util.c (ap_proxy_connect_backend).
I have not found the time to search for a solution.
Just as a check to my theory can you disable keepalives and see if everything works correctly
then?


[..cut..]


Regards

Rüdiger

Mime
View raw message