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?

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

  • 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 - Sonassi Oct 2 '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 8 '12 at 11:16

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.

  • 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 5 '12 at 11:49
  • Socket will still have edge on small requests where latency is essential. – c2h5oh Oct 8 '12 at 16:38
  • 1
    The why route them via a proxy? – symcbean Oct 22 '12 at 10:05

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
  • What about the webserver? Apache in this case. – Quintin Par Sep 28 '12 at 19:10
  • Possible to give an answer with a full flow? – Quintin Par Sep 28 '12 at 19:10
  • 1
    In a brief search, I couldn't find anything in the documentation that indicated that Apache is capable of listening on a unix domain socket. – Clint Miller Sep 28 '12 at 19:58
  • 5
    There is no need to define upstream to proxy requests to a unix socket, proxy_pass http://unix:/path/to/socket:; would do the trick as well, see nginx.org/r/proxy_pass. – Maxim Dounin Oct 3 '12 at 15:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.