В настоящее время у меня есть структура с сервером 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.
доверенное лицо - приложение, которое выполняет проверку запроса и / или выполняет подзапросы для предоставления контента
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
Может быть больше бэкендов, заканчивающихся на разных серверах ... Я просто следую примеру ;-).