Настройка Nginx Reverse Proxy для нескольких доменов: Полное руководство по server_name

Что такое обратный прокси в 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 значительно упрощает управление веб-инфраструктурой. Регулярно обновляйте конфигурацию и тестируйте изменения для поддержания оптимальной производительности.

Proxy Ninja
Добавить комментарий