Разделение запросов с помощью поддоменов на два сервера (Tomcat)

Вопрос или проблема

У меня есть следующая структура сети:
сцена 1

Внешний запрос с поддоменами должен быть направлен на два разных сервера TomCat (в зависимости от поддомена). В настоящее время я нашел рабочее решение с использованием разных портов для A и B (перенаправление портов; A и B создают DMZ). Но есть ли лучшее решение с высокой производительностью, где я использую немного программного обеспечения (?) для выполнения распределения.

Или мне нужно использовать другой сценарий (сцена 2), как на второй картинке? Какова могла бы быть часть ?-то тогда?
сцена 2
Спасибо.

Ответ или решение

Для организации распределения запросов по поддоменам на два разных сервера Tomcat, существует несколько эффективных подходов. Наиболее оптимальным решением будет использование обратного прокси-сервера, который сможет направлять запросы к нужному серверу в зависимости от поддомена.

Решение с использованием обратного прокси

  1. Выбор обратного прокси-сервера. Вы можете использовать Nginx или Apache HTTP Server как обратный прокси. Эти серверы могут принимать входящие HTTP-запросы и на основе поддомена перенаправлять их на соответствующий сервер Tomcat.

  2. Настройка Nginx. Рассмотрим пример настройки Nginx для двух поддоменов a.example.com и b.example.com.

    server {
        listen 80;
        server_name a.example.com;
    
        location / {
            proxy_pass http://tomcat-a:8080; # Укажите URL и порт сервера Tomcat A
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    server {
        listen 80;
        server_name b.example.com;
    
        location / {
            proxy_pass http://tomcat-b:8080; # Укажите URL и порт сервера Tomcat B
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  3. Настройка DNS. Убедитесь, что DNS-записи для поддоменов указывают на IP-адрес вашего сервера, где установлен Nginx.

Альтернативные варианты

Если вы рассматриваете вторую схему, где используется дополнительный балансировщик нагрузки (например, HAProxy), это также может быть эффективным решением, особенно если в будущем вы планируете масштабирование и добавление дополнительных серверов. В этом случае обратный прокси выполняет роль балансировщика нагрузки, направляя запросы на разные инстансы Tomcat в зависимости от нагрузки или других критериев.

Пример конфигурации для HAProxy:

frontend http_front
    bind *:80
    acl host_a hdr(host) -i a.example.com
    acl host_b hdr(host) -i b.example.com
    use_backend tomcat_a if host_a
    use_backend tomcat_b if host_b

backend tomcat_a
    server tomcat_a 192.168.1.10:8080 maxconn 32

backend tomcat_b
    server tomcat_b 192.168.1.11:8080 maxconn 32

Заключение

Использование обратного прокси (например, Nginx или HAProxy) предоставляет высокую производительность и гибкость. Это решение позволяет легко управлять поддоменами, и в случае необходимости масштабирования можно добавлять новые сервера без значительных изменений в архитектуре. Следуя представленным рекомендациям, вы сможете наладить стабильную и эффективную работу вашей инфраструктуры.

Оцените материал
Добавить комментарий

Капча загружается...