Налаштування балансування навантаження (Nginx/HAProxy) для сайту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування балансування навантаження (Nginx/HAProxy) для сайту
Складна
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування балансування навантаження Nginx і HAProxy

Балансировщик розподіляє вхідний трафік по кількох бекендам, виключає єдину точку відмови, дозволяє горизонтально масштабувати без змін клієнтського коду.

Nginx як балансировщик

Nginx балансує HTTP/HTTPS і TCP з коробки. Підходить для більшості веб-додатків: проксує запити до бекендів, health check, кешує відповіді.

# /etc/nginx/conf.d/myapp.conf

upstream myapp_backend {
    # Round-robin за замовчуванням
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
    server 10.0.1.12:8080;

    keepalive 32;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    location / {
        proxy_pass http://myapp_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 5s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

        proxy_next_upstream error timeout http_502 http_503;
        proxy_next_upstream_tries 2;
    }
}

Алгоритми балансування Nginx

# Least Connections
upstream backend_lc {
    least_conn;
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
}

# IP Hash
upstream backend_sticky {
    ip_hash;
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
}

# Weighted Round-Robin
upstream backend_weighted {
    server 10.0.1.10:8080 weight=3;
    server 10.0.1.11:8080 weight=1;
}

# Резервний сервер
upstream backend_backup {
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
    server 10.0.1.20:8080 backup;
}

HAProxy для високих навантажень

HAProxy — це спеціалізований балансировщик. Обробляє мільйони одночасних з'єднань, L4 (TCP) і L7 (HTTP), вбудована статистика та ACL.

# /etc/haproxy/haproxy.cfg

global
    log /dev/log local0
    maxconn 100000
    nbthread 4
    tune.ssl.default-dh-param 2048

defaults
    log global
    mode http
    option httplog
    option forwardfor
    option http-server-close
    timeout connect 5s
    timeout client 30s
    timeout server 60s

frontend http_front
    bind *:80
    bind *:443 ssl crt /etc/haproxy/certs/example.com.pem

    http-request redirect scheme https unless { ssl_fc }

    acl is_api path_beg /api/
    acl is_admin path_beg /admin/

    use_backend api_backend if is_api
    use_backend admin_backend if is_admin
    default_backend web_backend

backend web_backend
    balance leastconn
    option httpchk GET /health HTTP/1.1\r\nHost:\ example.com

    server web01 10.0.1.10:8080 check
    server web02 10.0.1.11:8080 check
    server web03 10.0.1.12:8080 check

backend api_backend
    balance roundrobin
    option httpchk GET /api/health

    server api01 10.0.2.10:3000 check
    server api02 10.0.2.11:3000 check

frontend stats
    bind *:8404
    stats enable
    stats uri /stats
    stats auth admin:strongpassword

Keepalived для HA

Два балансировщика (primary + backup) з віртуальним IP — при падінні primary, backup перехоплює VIP за секунди.

# /etc/keepalived/keepalived.conf (primary)
vrrp_script check_haproxy {
    script "pidof haproxy"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass secretpassword
    }

    virtual_ipaddress {
        10.0.0.100/24
    }

    track_script {
        check_haproxy
    }
}

Лінія часу

Задача Лінія часу
Nginx балансування + SSL termination 1–2 дні
HAProxy + статистика + ACL 2–3 дні
Keepalived HA-пара +1 день
Динамічне оновлення upstream +1–2 дні