Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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

share|improve this question
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

2 Answers 2

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
share|improve this answer
    
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
1  
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

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.

share|improve this answer
    
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
    
The why route them via a proxy? –  symcbean Oct 22 '12 at 10:05

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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