Прокси-балансировщики нагрузки Apache к сокету Unix вместо порта

#ruby-on-rails #apache #sockets #unix #unicorn

#ruby-on-rails #apache #сокеты #unix #unicorn

Вопрос:

Как мы можем выполнить приведенную ниже конфигурацию Nginx в Apache?
В основном проксирование к сокету 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;
    }
    ...
    ...
  }
}
  

Комментарии:

1. У кого-нибудь есть какой-либо ответ на это?

Ответ №1:

После довольно продолжительных поисков я пришел к выводу, что использование Apache2 Unicorn через сокеты невозможно. Самое дальнее, чего я добился, это использовал mod_fastcgi в файле сокета, который предоставляет unicorn, но при попытке получить доступ к странице я получил запрет 403. Похоже, что для FastCGI требуется протокол, отличный от используемого Unicorn. Придерживайтесь решения от Марка Колесара, если вам нужно использовать Unicorn с Apache. Имейте в виду, что вы можете столкнуться с проблемами (взяты из http://rubyforge.org/pipermail/mongrel-unicorn/2011-July/001057.html ):

Apache Unicorn по-прежнему не поддерживается, поскольку (насколько кому-либо известно) он не полностью буферизует ответы и запросы, чтобы полностью изолировать Unicorn от вредного воздействия медленных клиентов.

Ответ №2:

ProxyRequests отключен

ProxyPass /таблицы стилей/ !

ProxyPass /javascripts/ !

ProxyPass /изображения/ !

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

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

Комментарии:

1. Спасибо, Марк, значит, Apache не может пересылать запросы на сокет, верно?

Ответ №3:

Разве вы не можете сделать это, используя unixcat между ними? Наличие прокси-доступа к localhost: что-то xinetd unixcat установлено /etc/xinetd.d/unicorn, хранящееся:

 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
}