代理Apache负载均衡器到Unix套接字而不是端口

时间:2011-04-25 17:10:44

标签: ruby-on-rails apache sockets unix unicorn

我们如何在Apache中进行以下Nginx配置? 基本上代理到Unix套接字而不是负载平衡端口 我希望Unicorn处理负载平衡而不是Apache。

upstream unicorn_server {
  server unix:/home/prats/public_html/myapp/current/tmp/sockets/unicorn.sock
  fail_timeout=0;
}

server {
    ...
    ...
    ...
  location / {
    ...
    ...    
    # If you don't find the filename in the static files
    # Then request it from the unicorn server
    if (!-f $request_filename) {
      proxy_pass http://unicorn_server;
      break;
    }
    ...
    ...
  }
}

3 个答案:

答案 0 :(得分:3)

经过一段时间的搜索后,我得出结论,通过套接字使用Apache2 + Unicorn是不可能的。 我得到的最远的是在unicorn提供的套接字文件上使用mod_fastcgi,但是在尝试访问页面时我得到了403 Forbidden。 似乎FastCGI需要与Unicorn使用的协议不同的协议。 如果你必须使用Unicorn和Apache,请坚持使用Mark Kolesar的解决方案。请注意,您可能会遇到问题(取自http://rubyforge.org/pipermail/mongrel-unicorn/2011-July/001057.html):

  

Apache + Unicorn仍然不受支持(据有人所知),   它没有完全缓冲响应和完全隔离的请求   独角兽从慢客户的有害影响。

答案 1 :(得分:2)

ProxyRequests Off

ProxyPass / stylesheets /!

ProxyPass / javascripts /!

ProxyPass / images /!

ProxyPass / http://example.com:8080/

ProxyPassReverse / http://example.com:8080/

答案 2 :(得分:0)

你不能在中间使用unixcat吗? 将proxypass发送到localhost:某事 安装了xinetd + unixcat /etc/xinetd.d/unicorn holding:

service livestatus
{
    type        = UNLISTED
    port        = someport
    socket_type = stream
    protocol    = tcp
    wait        = no
    cps         = 100 3
    instances   = 500
    per_source  = 250
    flags       = NODELAY
    user        = someone
    server      = /usr/bin/unixcat
    server_args = /var/run/unicorn/mysocket
    only_from   = 127.0.0.1
    disable     = no
}