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