В настоящее время у меня есть структура с сервером 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-адресом?
Вам нужно будет настроить бэкэнды для каждого поддомена, или, возможно, использовать бэкэнд по умолчанию, если большинство запросов должно доходить до конкретного сервера. Если вы настроите несколько бэкендов, ничто не помешает им направить запросы на один и тот же веб-сервер.
Боюсь, это не совсем то, что вам нужно. HAproxy - отличный инструмент для работы в качестве прокси*, но пример использования, который вы приводите, не связан с прокси, а с обычным http-сервером*. В случае, если вы хотите заменить apache, опцией может быть, например, nginx.
proxy - приложение, которое проверяет запрос и / или делает subrequests для предоставления контента
http сервера - приложение, предоставляющее контент
Можно использовать HAproxy в качестве фронтенда и nginx в качестве бэкенда даже на одном и том же узле. Конфигурация 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
На разных серверах может быть больше бэкендов, заканчивающихся на разных... Я просто следую примеру ;-).
.