Dashboard > Администрирование > Home > NGINX, upstream fair > Просмотр
  Администрирование Вход | Зарегистрироваться   Вариант для печати.  
  NGINX, upstream fair
Добавил(а) shixaro, последний раз редактировал(а) shixaro Jan 02, 2009  (посмотреть изменения)
Метки: 
(None)

На nginx возможно использовать "справедливый" балансировщик, позволяющий равномерно распределять запросы между массивом бэкэндов. Ибо не факт, что единственный бэкэнд будет успевать отрабатывать все запросы. В lighttpd такая возможность есть изначально. Пример для lighttpd:

proxy.balance = "fair"

proxy.server  = (
  "/" =>
     ( ( "host" => "127.0.0.1", "port" => 3000 ),
       ( "host" => "127.0.0.1", "port" => 3001 ),
       ( "host" => "127.0.0.1", "port" => 3002 ),
       ( "host" => "127.0.0.1", "port" => 3003 ),
       ( "host" => "127.0.0.1", "port" => 3004 )
     )
  )

Если в Вашем дистрибутиве nginx не поддерживает такой возможности, то придется накладывать патч и вести пересборку уже с ним.
Процедура выглядит следующим образом (в моем случае имеет место быть FreeBSD):

    # cd /usr/ports/www
    # mv nginx{,-no-fair}
    # git clone git://github.com/rtomayko/nginx-port-upstream-fair.git nginx
    # cd nginx
    # git checkout -b upstream_fair origin/upstream_fair
    # make deinstall && make install clean

Получение новых изменений может быть осуществлено следующим образом:

    # cd /usr/ports/www/nginx
    # git pull
    # make reinstall

При желании возвратиться к основной версии следует исполнить:

# git checkout master

В случае с Debian Etch и выше операция пересборки не нужна. "Все включено"

Кусок конфигурации nginx:

upstream backend {
  server 127.0.0.1:3000;
  server 127.0.0.1:803;
  server 127.0.0.1:804;
}

Соответственно, бэкэнды слушают порты 3000, 803, 804. Полный пример конфигурационного файла для отдельного виртуалхоста может выглядеть так:

upstream backend {
  server 127.0.0.1:3000;
  server 127.0.0.1:803;
  server 127.0.0.1:804;
}

server {
            listen       80;
            server_name  www.testsite.ru testsite.ru;
            access_log  /var/log/nginx/testsite.access.log;
            # Main location
            location / {
                proxy_pass http://backend;
                proxy_redirect     off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                client_max_body_size       10m;
                client_body_buffer_size    128k;
                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;
                proxy_buffer_size          64k;
                proxy_buffers              4 64k;
                proxy_busy_buffers_size    64k;
                proxy_temp_file_write_size 64k;
            }
}

Обратите внимание, что бэкэнду передаются заголовки касательно адресов клиентов.

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5 Build:#805 Apr 26, 2007) - Запрос Bug/feature - Связаться с администраторами