httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Jagielski <...@jaguNET.com>
Subject Re: Fixing UDS in trunk/2.4 proposal
Date Mon, 19 Aug 2013 17:04:27 GMT

On Aug 10, 2013, at 12:30 PM, Jeff Trawick <trawick@gmail.com> wrote:

> On Sat, Aug 10, 2013 at 11:32 AM, Jim Jagielski <jim@jagunet.com> wrote:
> +1... By the way, I'm working on a minor patch that works around
> that "stupid" encoding of '/' requirement...
> 
> Did you give any thought to bypassing the normal proxy parsing altogether?

Yeah... 
> 
> For mod_authnz_fcgi I started by using a copy of ap_proxy_canon_netloc() to parse the
backend address, but I think I'll just use a few regexes (literal IPv6 address+port, any other
address+port, and eventually socket= when AF_UNIX is implemented).  I don't have access to
proxy APIs and there's just too much baggage with what ap_proxy_canon_netloc() has to do for
proxy to bring it along only for fcgi addresses.
> 
> 
> 
> On Fri, Aug 09, 2013 at 03:51:20PM -0500, Daniel Ruggeri wrote:
> > So I'm tasked with making httpd hold its own weight better against nginx
> > as a reverse proxy to a local service. Unfortunately, nginx supports UDS
> > and we don't quite yet. I've come across a bug that seems easy enough to
> > fix, but I am wondering if there's a better way. Thoughts are welcome.
> >
> > With the currently proposed UDS support in mod_proxy, first requests
> > always seem fine but subsequent requests for the worker fail (attempted
> > DNS lookup when none should be done). I wouldn't have +1'ed had I
> > realized this at the time, but I have a proposed fix...
> >
> > --- httpd-2.4.6-UDS/modules/proxy/proxy_util.c  2013-08-09
> > 15:12:23.000000000 -0500
> > +++ httpd-2.4.6/modules/proxy/proxy_util.c      2013-08-09
> > 15:15:33.000000000 -0500
> > @@ -2127,7 +2127,7 @@
> >       */
> >
> >      if (!conn->hostname || !worker->s->is_address_reusable ||
> > -        worker->s->disablereuse || strncmp(conn->hostname, "socket=",
> > 7) == 0) {
> > +        worker->s->disablereuse) {
> >          if (proxyname) {
> >              conn->hostname = apr_pstrdup(conn->pool, proxyname);
> >              conn->port = proxyport;
> >
> > I haven't spent a ton of time on this so I'm wondering... This seems
> > simple enough, but isn't there a place we could do this once to avoid
> > having to execute the same logic (substring and path decode) on all
> > subsequent requests? I'd also much rather not have to do a string
> > comparison on all subsequent hits...
> >
> > If I don't hear anything otherwise, I'll just commit this and add it to
> > the backport proposal next week or so
> >
> >
> > P.S.
> > My simple tests with 100 concurrent users for a total of 1,000,000
> > requests yielded the following numbers (with the above patch applied).
> > The backend supports about 20k requests/sec. This seems to be a mighty
> > compelling case for UDS...
> >
> > nginx UDS: 16001.28
> > nginx UDS: 18138.94
> > nginx UDS: 15499.64
> >
> > Apache UDS: 16348.70
> > Apache UDS: 14580.92
> > Apache UDS: 15211.97
> >
> > Apache TCP: 11859.46
> > (only got one in)
> >
> > --
> > Daniel Ruggeri
> 
> --
> ===========================================================================
>    Jim Jagielski   [|]   jim@jaguNET.com   [|]   http://www.jaguNET.com/
>         "Great is the guilt of an unnecessary war"  ~ John Adams
> 
> 
> 
> -- 
> Born in Roswell... married an alien...
> http://emptyhammock.com/


Mime
View raw message