- Что такое Reverse Proxy и зачем он нужен для двух серверов?
- Преимущества использования Nginx в качестве Reverse Proxy
- Пошаговая настройка Nginx Reverse Proxy для двух серверов
- Шаг 1: Установка Nginx
- Шаг 2: Конфигурация upstream-блока
- Шаг 3: Настройка виртуального хоста
- Шаг 4: Проверка и перезагрузка
- Оптимизация работы Reverse Proxy
- Распространенные проблемы и решения
- Часто задаваемые вопросы (FAQ)
- Как проверить работоспособность серверов в upstream?
- Можно ли использовать разные порты для серверов?
- Как настроить SSL для Reverse Proxy?
- Чем отличается least_conn от ip_hash?
- Как ограничить доступ к бэкенд-серверам?
Что такое Reverse Proxy и зачем он нужен для двух серверов?
Reverse proxy (обратный прокси) в Nginx выступает посредником между клиентами и вашими серверами. Когда вам нужно распределить нагрузку между двумя бэкенд-серверами, Nginx становится незаменимым инструментом. Он принимает входящие запросы, перенаправляет их на один из серверов (app1 или app2), а затем возвращает результат клиенту. Это повышает отказоустойчивость: если один сервер падает, Nginx автоматически перенаправляет трафик на рабочий.
Преимущества использования Nginx в качестве Reverse Proxy
- Балансировка нагрузки: Равномерное распределение запросов между серверами
- Безопасность: Скрытие структуры внутренней сети и защита от DDoS-атак
- Кэширование: Ускорение отдачи статического контента
- SSL/TLS терминация: Централизованное управление сертификатами
- Гибкая маршрутизация: Настройка правил на основе URL, IP или cookies
Пошаговая настройка Nginx Reverse Proxy для двух серверов
Шаг 1: Установка Nginx
Обновите пакеты и установите Nginx на сервер-прокси:
sudo apt update
sudo apt install nginx -y
Шаг 2: Конфигурация upstream-блока
В файле /etc/nginx/nginx.conf
добавьте блок, определяющий серверы бэкенда:
http {
upstream backend {
server 192.168.1.10:80; # Первый сервер
server 192.168.1.11:80; # Второй сервер
least_conn; # Алгоритм балансировки
}
}
Шаг 3: Настройка виртуального хоста
Создайте конфиг в /etc/nginx/sites-available/
:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Шаг 4: Проверка и перезагрузка
sudo nginx -t # Проверка конфигурации
sudo systemctl reload nginx
Оптимизация работы Reverse Proxy
- Таймауты: Настройте
proxy_connect_timeout
иproxy_read_timeout
- Кэширование: Добавьте
proxy_cache_path
для статики - Health checks: Используйте
max_fails
иfail_timeout
в upstream - Буферизация: Отрегулируйте
proxy_buffer_size
Распространенные проблемы и решения
- 502 Bad Gateway: Проверьте доступность бэкенд-серверов и firewall
- Дисбаланс нагрузки: Смените алгоритм на
ip_hash
илиleast_conn
- Потеря заголовков: Добавьте
proxy_set_header
для нужных параметров - Медленное соединение: Увеличьте
proxy_read_timeout
Часто задаваемые вопросы (FAQ)
Как проверить работоспособность серверов в upstream?
Используйте команду curl -I http://ваш-сервер
или мониторинг через Nginx Plus. В open-source версии добавьте параметры max_fails=3 fail_timeout=30s
в upstream-блоке.
Можно ли использовать разные порты для серверов?
Да, укажите порты в директиве server: server backend1.com:8080;
. Nginx поддерживает любые комбинации IP:PORT.
Как настроить SSL для Reverse Proxy?
Добавьте сертификат в конфиг server-блока и измените proxy_pass на HTTPS:
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass https://backend;
}
Чем отличается least_conn от ip_hash?
least_conn
направляет запрос на сервер с наименьшим числом активных соединений. ip_hash
привязывает клиента к конкретному серверу по IP, что полезно для сессий.
Как ограничить доступ к бэкенд-серверам?
Настройте firewall (например, ufw) для разрешения доступа только с IP Nginx-прокси: sudo ufw allow from nginx_ip to any port 80
.