Skip to content

Настройка балансировки на базе Angie (sticky)

schema

В статье была рассмотрена настройка балансировщика на базе Angie в «Astra Linux» и «РЕД ОС».

В данном варианте балансируемые сервера (WebApp) подняты на SSL/TLS, и сам собственно балансировщик на Angie тоже будет на SSL/TLS.

1. Получите root-права

Наберите команду и введите пароль:

bash
sudo su

2. Установите Angie и модуль angie-module-vts

  • Варианты установки на различные ОС описаны разработчиком по ссылке.

  • Варианты установки Angie PRO описаны по ссылке.

2.1. Пакетная установка на Astra Linux

bash
apt-get update
apt-get install -y ca-certificates curl lsb-release

curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg \
            https://angie.software/keys/angie-signing.gpg

echo "deb https://download.angie.software/angie/astra-se/$(egrep -o \
       '[0-9]+.[0-9]+' /etc/astra_version) unstable main" \
       | sudo tee /etc/apt/sources.list.d/angie.list > /dev/null

apt-get update
apt-get install -y angie

apt install angie-module-vts

2.2. Пакетная установка на РЕД ОС

Создайте файл /etc/yum.repos.d/angie.repo:

bash
nano /etc/yum.repos.d/angie.repo

C содержимым:

angie.repo
[angie]
name=Angie repo
baseurl=https://download.angie.software/angie/redos/$releasever/
gpgcheck=1
enabled=1
gpgkey=https://angie.software/keys/angie-signing.gpg.asc

Выполните команды:

bash
yum install -y angie
yum install angie-module-vts
systemctl start angie
systemctl enable angie

3. Создайте каталог /etc/angie/upstreams

В каталоге будут указаны балансируемые сервера и каталог /etc/angie/conf.ks, куда необходимо поместить файл bot_blocked.conf.

bot_blocked.conf – файл с http_user_agent.

bash
mkdir -p /etc/angie/upstreams
mkdir -p /etc/angie/conf.ks

wget -O /etc/angie/conf.ks/bot_blocked.conf https://keysystems.ru/files/web/Scripts/wsks/bot_blocked.conf
chown angie:angie /etc/angie/conf.ks/bot_blocked.conf
chmod 750 /etc/angie/conf.ks/bot_blocked.conf

4. Создайте файл /etc/angie/upstreams/upstream-budget.conf

bash
nano /etc/angie/upstreams/upstream-budget.conf

С содержимым:

Следует использовать метод балансировки sticky, при котором запросы распределяются по серверам на основе клиентских сессий.

upstream upstream-budget {
    sticky cookie srv_id;
    server 10.10.0.141:443 max_fails=3 fail_timeout=10s;
    server 10.10.0.143:443 max_fails=3 fail_timeout=10s;
}

Здесь вместо 10.10.0.141:443 и 10.10.0.143:443 укажите свои балансируемые сервера. Если порт отличен от 80, то обязательно укажите порт как показано в примере!

  • sticky - настраивает привязку клиентских сессий к проксируемым серверам в режиме, заданном первым параметром.

  • max_fails - задает количество неудачных попыток связи с сервером, которое должно произойти в течение времени, заданного параметром, fail_timeout чтобы считать сервер недоступным в течение времени, также заданного fail_timeout параметром. По умолчанию количество неудачных попыток равно 1. Нулевое значение отключает учет попыток.

5. Создайте каталог /etc/angie/ssl и скопируйте туда сертификаты SSL

bash
mkdir -p /etc/angie/ssl

6. Отредактируйте /etc/angie/angie.conf предварительно сделав копию

bash
cp /etc/angie/angie.conf /etc/angie/angie.conf.bak
nano /etc/angie/angie.conf

С содержимым:

angie.conf
user  angie;
worker_processes  auto;
worker_rlimit_nofile 65536;

load_module ./modules/ngx_http_vhost_traffic_status_module.so; #модуль сбора статистики

error_log  /var/log/angie/error.log notice;
pid        /run/angie.pid;

events {
    worker_connections  65536;
}

http {
    include       /etc/angie/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    log_format extended '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" rt="$request_time" '
                        '"$http_user_agent" "$http_x_forwarded_for" '
                        'h="$host" sn="$server_name" ru="$request_uri" u="$uri" '
                        'ucs="$upstream_cache_status" ua="$upstream_addr" us="$upstream_status" '
                        'uct="$upstream_connect_time" urt="$upstream_response_time"';

    access_log  /var/log/angie/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    client_max_body_size 100M;
    server_tokens off;
    vhost_traffic_status_zone;

    include /etc/angie/upstreams/*.conf; # адреса балансируемых серверов

    server {
        listen       443 ssl;
        listen       [::]:443 ssl;
        http2  on;
        server_name  localhost;
        include /etc/angie/conf.ks/bot_blocked.conf;

        ssl_certificate "/etc/angie/ssl/wsks-19.08_demo.crt";
        ssl_certificate_key "/etc/angie/ssl/wsks-19.08_demo.key";
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;

        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_ecdh_curve              secp384r1;
        ssl_session_cache           shared:SSL:10m;
        ssl_session_tickets         off;
        ssl_stapling                on;
        ssl_stapling_verify         on;
 
        access_log /var/log/angie/budget-access.log;
        error_log /var/log/angie/budget-error.log;

        proxy_next_upstream error timeout http_502;
        proxy_next_upstream_tries 0;

        location / {

             proxy_pass  https://upstream-budget;
             proxy_set_header   Upgrade $http_upgrade;
             proxy_set_header   Connection "Upgrade";
             proxy_set_header   Host $host:$server_port;
             proxy_cache_bypass $http_upgrade;
             proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header   X-Forwarded-Proto $scheme;

             proxy_read_timeout 1800;
             proxy_connect_timeout 1800;
             proxy_send_timeout 1800;

             proxy_buffer_size 64k;
             proxy_buffers 4 64k;
             proxy_busy_buffers_size 64k;
        }

        location /status {
  # укажите IP, с которых разрешен доступ к статистике
            allow 127.0.0.1;
            deny all;
            vhost_traffic_status_bypass_stats on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
   }

}

При необходимости измените:

  • имена виртуального сервера, параметр server_name;
  • имена сертификатов, параметр ssl_certificate;
  • параметр proxy_pass (к примеру на torgi) и access_log, error_log;
  • добавьте IP адрес в секцию status, с которого будет доступна статистика по балансировщику.

7. Настройте правило Selinux для РЕД ОС

bash
setsebool -P httpd_can_network_connect 1

во избежание ошибок вида: *2 connect() to 10.10.0.141:443 failed (13: Permission denied) while connecting to upstream

8. Перезапустите Angie и проверьте работу останавливая балансируемые сервера

bash
systemctl restart angie
systemctl status angie

9. Проверьте наличие таймера logrotate.timer для РЕД ОС

bash
systemctl list-units -t timer --all

Eсли в списке нет таймера logrotate.timer, то включите его (баг в RedOS 7.3.1):

bash
systemctl enable logrotate.timer --now

Дополнительно

Перечитать конфигурацию без перезапуска Agine

bash
service angie reload
angie -s reload

Пример статистики модуля angie-module-vts

Ссылка доступна по адресу .../status.

Команда для сброса статистики:

.../status/control?cmd=reset&group=*

nginx-vhost-traffic-status

© 2003—2025 ООО «Кейсистемс». Все права защищены.