httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Fritsch ...@sfritsch.de>
Subject Re: 2.3.15 RewriteRule P
Date Sun, 01 Jan 2012 20:39:08 GMT
On Wednesday 16 November 2011, Steffen wrote:
> What I noticed, it is connecting to a port by a formerly used
> proxied  connection (port 7080 instead of 81);
> 
> Summary log:
> 
> [proxy:debug] [pid 8680:tid 2668] proxy_util.c(2140): proxy: HTTP:
> has  acquired connection for (*)
> [proxy:debug] [pid 8680:tid 2668] proxy_util.c(2193): proxy:
> connecting  http://127.0.0.1:81/sysadmin to 127.0.0.1:81
> [proxy:debug] [pid 8680:tid 2668] proxy_util.c(2319): proxy:
> connected  /sysadmin to 127.0.0.1:7080


After a cursory glance at the code, I have a suspicion about the 
reason. It seems to me that this check in proxy_util.c

    /*
     * Make sure that we pick the the correct and valid worker.
     * If a single keepalive connection triggers different workers,
     * then we have a problem (we don't select the correct one).
     * Do an expensive check in this case, where we compare the
     * the hostnames associated between the two.
     *
     * TODO: Handle this much better...
     */
    if (!conn->hostname || !worker->s->is_address_reusable ||
         worker->s->disablereuse ||
         (r->connection->keepalives &&
         (r->proxyreq == PROXYREQ_PROXY || r->proxyreq == 
PROXYREQ_REVERSE) &&
         (strcasecmp(conn->hostname, uri->hostname) != 0) ) ) {



should also compare conn->port and uri->port, i.e. the 


         (strcasecmp(conn->hostname, uri->hostname) != 0)


should be 


         (strcasecmp(conn->hostname, uri->hostname) != 0 ||
          conn->port != uri->port)


Can anyone more familiar with the code verify this? Steffen, maybe you 
can try the change and see if it helps?

Cheers,
Stefan

Mime
View raw message