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