🔥 HAProxy – что это и зачем?
HAProxy (High Availability Proxy) — это мощный, быстрый и надежный балансировщик нагрузки и прокси-сервер. Он часто используется для распределения трафика между серверами, улучшения доступности и масштабирования веб-приложений.
👉 Подходит для:
✅ Балансировки нагрузки (например, между несколькими backend-серверами).
✅ Реверс-прокси (перенаправление запросов от клиента к нужному сервису).
✅ SSL-терминации (шифрование и дешифрование трафика).
✅ Failover и высокая доступность (если один сервер падает, запросы перенаправляются на другой).
⚙️ 1. Как работает HAProxy?
HAProxy принимает запросы от пользователей и распределяет их между backend-серверами по заданным правилам.
🔹 Схема работы HAProxy
+-------------+ +-------------------+
| Клиент | ---> | HAProxy | ---> [Server 1]
| (User) | | (Load Balancer) | ---> [Server 2]
+-------------+ +-------------------+
📌 Пример: если у нас есть 3 Laravel-сервера, HAProxy равномерно распределит нагрузку между ними.
🛠 2. Установка HAProxy (Linux/Docker)
🔹 На Ubuntu/Debian
sudo apt update && sudo apt install haproxy -y
🔹 Через Docker
docker run -d --name haproxy -p 80:80 -p 443:443 haproxy:latest
📄 3. Базовая конфигурация HAProxy
Файл конфигурации: /etc/haproxy/haproxy.cfg
🔹 Пример: балансировка нагрузки между тремя серверами
defaults
log global
timeout connect 5s
timeout client 30s
timeout server 30s
frontend http_front
bind *:80
default_backend web_servers
backend web_servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
server web3 192.168.1.12:80 check
📌 Что здесь происходит?
- frontend http_front → HAProxy слушает порт 80.
- backend web_servers → Запросы идут на 3 сервера (192.168.1.10, 192.168.1.11, 192.168.1.12).
- balance roundrobin → Запросы равномерно распределяются по серверам (Round Robin).
💡 Другие методы балансировки:
roundrobin
– циклически (по кругу).leastconn
– отправляет запрос на сервер с наименьшей нагрузкой.source
– запросы от одного IP всегда идут на один и тот же сервер.
🔐 4. Настроим SSL-терминацию (HTTPS)
Можно настроить HAProxy, чтобы он принимал HTTPS-запросы и расшифровывал их, передавая на backend через HTTP.
📌 Пример HTTPS + балансировки нагрузки:
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem
default_backend web_servers
backend web_servers
balance leastconn
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
⚡ Что делает этот конфиг?
✅ HAProxy принимает HTTPS-запросы на 443 порту и расшифровывает их.
✅ Перенаправляет трафик на backend-серверы через HTTP.
✅ Использует балансировку leastconn
(сервер с наименьшей нагрузкой).
🔹 Где взять SSL-сертификат?
Можно использовать Let’s Encrypt:
sudo certbot certonly --standalone -d mydomain.com
Затем объединить файлы сертификата и ключа:
cat /etc/letsencrypt/live/mydomain.com/fullchain.pem /etc/letsencrypt/live/mydomain.com/privkey.pem > /etc/haproxy/certs/mydomain.pem
🔄 5. Запуск и перезапуск HAProxy
После изменений в haproxy.cfg
нужно перезапустить HAProxy:
sudo systemctl restart haproxy
Проверить статус:
sudo systemctl status haproxy
🚀 6. Использование HAProxy в Docker Compose
Если у вас Laravel + Docker, можно добавить HAProxy в docker-compose.yml
.
📌 Пример docker-compose.yml
с HAProxy:
version: '3.8'
services:
haproxy:
image: haproxy:latest
container_name: haproxy
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
ports:
- "80:80"
- "443:443"
depends_on:
- app1
- app2
app1:
image: laravel-app
container_name: laravel1
environment:
APP_ENV: production
app2:
image: laravel-app
container_name: laravel2
environment:
APP_ENV: production
Что здесь происходит?
✔ HAProxy принимает запросы на 80/443 портах.
✔ Балансирует трафик между app1
и app2
(двумя Laravel-контейнерами).
🎯 Вывод
✅ HAProxy – мощный балансировщик нагрузки и реверс-прокси.
✅ Можно использовать с Laravel, Docker, Kubernetes.
✅ Поддерживает SSL, Sticky Sessions, Health Checks.
✅ Легко масштабирует приложение, улучшает доступность.
📌 Где применяют HAProxy?
- Масштабирование Laravel-приложений.
- Разгрузка серверов (нагрузка распределяется между разными инстансами).
- API Gateway (прокси для API).
- Резервирование серверов (если один упал, трафик идет на другие).