Поддерживает ли HAProxy несколько поддоменов на одном сервере?

Поддерживает ли HAProxy несколько поддоменов на одном сервере?

В настоящее время у меня есть структура с сервером Apache 2 с несколькими поддоменами. Как в примере ниже:

<VirtualHost *:80>
 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www/main
</VirtualHost>

<VirtualHost *:80>
 ServerName subdomain-1.example.com
 ServerAlias subdomain-1.example.com
 DocumentRoot /var/www/sbd1
</VirtualHost>

<VirtualHost *:80>
 ServerName subdomain-2.example.com
 ServerAlias subdomain-2.example.com
 DocumentRoot /var/www/sbd2
</VirtualHost>

Я подумываю о том, чтобы продублировать этот сервер и просто создать новый с HAProxy для балансировки нагрузки.

Поддерживает ли HAProxy направление всех запросов на дочерний сервер с тем же IP-адресом или для каждого поддомена мне понадобится определенный сервер с определенным IP-адресом?

решение1

Вам нужно будет настроить бэкенды для каждого поддомена или, возможно, использовать бэкенд по умолчанию, если большинство запросов должно достигать определенного сервера. Если вы настроите несколько бэкендов, ничто не помешает им указывать на один и тот же веб-сервер.

решение2

Боюсь, это не совсем то, что вам нужно. HAproxy — отличный инструмент для работы в качестве прокси*, но вариант использования, который вы приводите в качестве примера, не связан с прокси, а с обычным http-сервером*. В случае, если вы хотите заменить apache, то вариантом может быть, например, nginx.


прокси- приложение, которое выполняет проверку запроса и/или выполняет подзапросы для предоставления контента

http-сервер- приложение, предоставляющее контент


Можно использовать HAproxy как frontend и nginx как backend даже на одном узле. Конфигурация HAproxy будет примерно такой (без https, как запрашивалось):

frontend http_front
    maxconn 1000
    mode http
    option http-server-close
    option forwardfor
    bind *:80

    acl top_domain hdr(host) -m str www.example.com
    acl top_domain hdr(host) -m str example.com

    acl subdom1 hdr(host) -m str www.subdomain-1.example.com
    acl subdom1 hdr(host) -m str subdomain-1.example.com

    acl subdom2 hdr(host) -m str www.subdomain-2.example.com
    acl subdom2 hdr(host) -m str subdomain-2.example.com


    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto http if !{ ssl_fc }

    use_backend local if subdom1
#   ...
    default_backend local

backend local
    fullconn 1000
    mode http
    timeout http-keep-alive 3000
    server local1 127.0.0.1:8080 check maxconn 100

Может быть больше бэкэндов, заканчивающихся на разных серверах... Я просто следовал примеру ;-).

Связанный контент