EN EN

Проксирование TCP-соединений с HAProxy: Руководство для начинающих

Опубликовано 03.10.2025

Проксирование TCP-соединений с HAProxy: Руководство для начинающих

Введение

Если вы начинающий системный администратор или разработчик, наверняка сталкивались с задачей управления сетевым трафиком.
Один из мощных инструментов для этого — HAProxy, высокопроизводительный балансировщик нагрузки для TCP и HTTP.

В этой статье мы разберём:

  • что такое TCP-проксирование,
  • зачем использовать HAProxy,
  • пример конфигурации для новичков,
  • советы по безопасности и мониторингу.

Что такое проксирование TCP?

Проксирование TCP — это пересылка TCP-соединений от клиента к серверу (или группе серверов) через посредника.
В отличие от HTTP-прокси, который работает на прикладном уровне, TCP-проксирование происходит на транспортном, что делает его универсальным для любых TCP-протоколов: от баз данных до почтовых сервисов.


Зачем использовать HAProxy?

HAProxy — это лёгкий и гибкий инструмент, который позволяет:

  • 🔄 распределять нагрузку между несколькими серверами;
  • ✅ проверять доступность серверов;
  • 📊 предоставлять удобную статистику и мониторинг;
  • 🔒 обрабатывать SSL-трафик (терминация или сквозная передача).

Пример конфигурации HAProxy для TCP-проксирования

Ниже конфигурация, которая слушает соединения на порту 4444 и перенаправляет их на тестовый сервер.

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend tcp-frontend
    bind *:4444
    mode tcp
    default_backend tcp-backend

backend tcp-backend
    mode tcp
    balance roundrobin
    option tcp-check
    server server1 192.168.1.100:443 weight 1

Разбор конфигурации

  • global — задаёт базовые параметры (логирование, chroot, пользователя, режим демона).
  • defaults — дефолтные опции, включая таймауты. По умолчанию mode http, но в frontend и backend переопределяем на tcp.
  • frontend tcp-frontend — слушает порт 4444 и пересылает запросы в backend.
  • backend tcp-backend — балансирует соединения, проверяет их доступность (tcp-check), определяет список серверов.

Настройка HAProxy пошагово

  1. Установите HAProxy:

    # Ubuntu/Debian
    sudo apt update && sudo apt install haproxy
    
    # CentOS/RHEL
    sudo yum install haproxy
    
  2. Сохраните конфигурацию в /etc/haproxy/haproxy.cfg.

  3. Проверьте синтаксис:

    haproxy -c -f /etc/haproxy/haproxy.cfg
    
  4. Перезапустите сервис:

    sudo systemctl restart haproxy
    sudo systemctl enable haproxy
    
  5. Протестируйте подключение:

    telnet <haproxy-ip> 4444
    

Мониторинг: страница статистики

Чтобы отслеживать состояние серверов и соединений, добавьте секцию:

frontend stats
    bind *:3308
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Haproxy\ Statistics
    stats auth admin:securepassword123
    stats admin if TRUE

Откройте в браузере:

http://<haproxy-ip>:3308/haproxy?stats

Советы для новичков

  • 🔐 Безопасность — используйте сложные пароли и ограничивайте доступ к статистике по IP.

  • 🩺 Здоровье серверовtcp-check базовый, можно расширить проверками для конкретного протокола.

  • Масштабирование — добавьте больше серверов:

    server server2 192.168.1.101:443 weight 1
    server server3 192.168.1.102:443 weight 1
    
  • 📝 Логирование — проверьте /var/log/haproxy.log (при необходимости настройте rsyslog).


Примеры использования

  • Балансировка баз данных (MySQL, PostgreSQL).
  • Проксирование почтовых сервисов (SMTP, IMAP).
  • Сквозное SSL-проксирование.
  • Единая точка входа для микросервисов.

Заключение

HAProxy делает TCP-проксирование простым даже для новичков. Достаточно настроить frontend и backend, добавить проверки доступности и мониторинг — и у вас готов надёжный прокси.

С ростом опыта можно переходить к продвинутым сценариям: SSL-терминация, ACL, кастомные health-check-и.

Успехов в настройке и балансировке! 🚀

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Похожие посты