- Что такое обратный прокси в Nginx и зачем нужен multiple server_name?
- Базовые принципы настройки reverse proxy с несколькими server_name
- Пошаговый пример конфигурации для нескольких доменов
- Продвинутые техники управления трафиком
- Типичные проблемы и оптимизация производительности
- FAQ: Ответы на ключевые вопросы
Что такое обратный прокси в Nginx и зачем нужен multiple server_name?
Обратный прокси-сервер Nginx выступает посредником между клиентами и бэкенд-серверами, обеспечивая балансировку нагрузки, кэширование и повышенную безопасность. Директива server_name
позволяет одному экземпляру Nginx обслуживать несколько доменов, перенаправляя трафик на соответствующие серверы. Это критически важно для:
- Хостинга множества сайтов на одном IP-адресе
- Упрощения управления инфраструктурой
- Обработки поддоменов и мультитенантных систем
- Реализации микросервисной архитектуры
Базовые принципы настройки reverse proxy с несколькими server_name
Конфигурация начинается с блока server
в файле /etc/nginx/nginx.conf
. Ключевые элементы:
- Директива listen: Определяет порт (обычно 80 или 443)
- server_name: Перечисляет домены через пробел (example.com api.example.com)
- location /: Задает правила проксирования с
proxy_pass
- Wildcard-символы: Использование
*.example.com
для поддоменов
Пошаговый пример конфигурации для нескольких доменов
server { listen 80; server_name site1.ru www.site1.ru; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; } } server { listen 80; server_name site2.com api.site2.com; location / { proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr; } }
После изменений проверьте конфигурацию командой nginx -t
и перезагрузите сервис.
Продвинутые техники управления трафиком
- Regex в server_name:
server_name ~^(?.+).example.com$
для динамических поддоменов - Приоритет обработки: Nginx выбирает блок server по точному совпадению → wildcard → regex
- SSL/TLS сертификаты: Используйте блоки
listen 443 ssl
с отдельными сертификатами для каждого домена - Кэширование: Добавьте
proxy_cache
для статического контента
Типичные проблемы и оптимизация производительности
Распространенные ошибки включают конфликты server_name и неправильные заголовки. Для оптимизации:
- Установите
keepalive_timeout
для постоянных соединений - Настройте
proxy_buffer_size
для больших ответов - Используйте
upstream
блоки для кластеризации бэкендов - Мониторьте логи ошибок:
/var/log/nginx/error.log
FAQ: Ответы на ключевые вопросы
Q: Как добавить новый домен в существующую конфигурацию?
A: Создайте новый блок server
с уникальным server_name
или добавьте домен в существующий блок через пробел.
Q: Можно ли использовать один SSL-сертификат для нескольких доменов?
A: Да, с помощью wildcard-сертификатов (для поддоменов) или SAN-сертификатов (для разных доменов).
Q: Почему Nginx выбирает не тот server блок?
A: Проверьте приоритетность: точные имена имеют высший приоритет. Убедитесь в отсутствии дубликатов.
Q: Как ограничить доступ по IP для определенных доменов?
A: Добавьте в блок location
директиву:
allow 192.168.1.1; deny all;
Q: Обрабатывает ли Nginx HTTPS трафик с multiple server_name?
A: Да, но для каждого домена требуется настройка SSL в отдельном блоке server
на порту 443.
Использование multiple server_name в Nginx reverse proxy значительно упрощает управление веб-инфраструктурой. Регулярно обновляйте конфигурацию и тестируйте изменения для поддержания оптимальной производительности.