Nginx upstreams — балансировка нагрузки

Для Nginx балансировка нагрузки является основной задачей Nginx наряду с кэшированием и отдачей статики, это позволяет эффективно использовать его для нагруженных проектов. Через Nginx может работать почта, он применяется в кластерах веб-серверов с Apache и приложениями на Python и Ruby.

 

 

Nginx балансировка нагрузки и распределение нагрузки

Минимальный конфигурационный файл Nginx выглядит так (описание процесса настройки с нуля):

server {
listen *:80;

server_name example.com;
access_log /var/log/nginx/access.log;

location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
}

 

Балансировка между несколькими несколькими серверами или апстриами делается за счет добавления в начало файла дополнительного блока:

 

upstream backend {

server example.com;
server backend1.example.com weight=3;
server backend2.example.com:8080;
server backup3.example.com:8080 backup;
}

 

Подробная информация содержится в документации Nginx

 

В качестве server в основной части конфигурационного файла задан proxy_pass на порт 8080 локального хоста — также может указываться Unix сокет или имя сайта, на которое нужно направлять запросы.
Nginx балансировка нагрузки
 

Если указано несколько значений директивы — запросы при этом будут распределяться поровну или в указанных (при помощи задания веса) пропорциях:

 

 

Другие апстримы в примере:

server backend1.example.com weight=3;

Для backend1.example.com задан вес 3 одного из «серверов» — это означает, что на него будет направляться в 3 раза больше запросов.

 

server backend2.example.com:8080;

При выборе этого апстирма обращения будут происходить по hostname на порт 8080.

 

server backup3.example.com:8080 backup;

server backup будет использован только в случае если запросы отправить на первые три из указанных серверов невозможно.

 

 

Можно ограничить количество попыток обращения к апстиму Nginx в случае если ответа нет

В конфигурационном файле:

server backend2.example.com:8080 max-fails=2 fail_timeout=30s;

 

Если запрос не вернет код ответа 200 в течение 30 секунд, обращение произойдет вновь. Еще через 30 секунд Nginx посчитает сервер недоступным и исключит его из списка машин, которые можно использовать.

 

Балансировка Nginx осуществляется очень просто и эффективно. Типичная роль Nginx в любой архитектуре — фронтэнд, он успешно работает с любым приложением и успешно справляется с распределением запросов делая это очень быстро.

 

Альтернативой является специализированное решение для балансировки — HAPROXY