7

My Nginx reverse proxy works on the same machine as the webserver(apache) as follows

server {  server_name site.net;
    location / {
        proxy_pass http://localhost:82;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;

    }
}

Now instead of using TCP connections to the backend apache, how can I tune it to use unix sockets?

Edit:
Can someone help with the full flow, instructing apache to listen on unix sockets too

Quintin Par
  • 4,293
  • 10
  • 46
  • 72
  • 3
    AFAIK Apache doesn't support listening on a socket ... its a web server. If performance is your reason for doing this, the difference between sockets/tcp is negligible for most web servers - as the bottleneck is whatever app is running anyway (PHP/Perl etc.) – Ben Lessani Oct 02 '12 at 21:04
  • I assume you have too many connections which stack up so you want to move proxy from tcp stack to socket. I would suggest you to try disable keepalive; also it might help to enable TCP_TW_REUSE (net.ipv4.tcp_tw_reuse) – Hrvoje Špoljar Oct 08 '12 at 11:16

2 Answers2

11

While you most likely could set Nginx to proxy redirect to a socket using unix:/path/to/socket syntax, Apache Listen directive only accepts IPv4 or IPv6, so as far as I know you can't get Apache to listen on an unix socket.

c2h5oh
  • 1,489
  • 10
  • 13
  • It would be trivial to script a proxy to map the unix socket to a network socket - but you lose any performance benefit. OTOH the lo interface doesn't have nearly the same performance constraints as a physical interface, even if it does slow start, as long as you've got big congestion windows then it should run at nearly the same speed as a unix socket. – symcbean Oct 05 '12 at 11:49
  • Socket will still have edge on small requests where latency is essential. – c2h5oh Oct 08 '12 at 16:38
  • 1
    The why route them via a proxy? – symcbean Oct 22 '12 at 10:05
6

You need to define an upstream like this:

upstream upstream_name {
        server unix:/path/to/socket fail_timeout=0;
}

And then set proxy_pass to reference that upstream by name, i.e.,

proxy_pass http://upstream_name
Clint Miller
  • 1,141
  • 1
  • 11
  • 19