我目前有一个带有多个子域的 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
您需要为每个子域配置后端,或者如果大多数请求应到达特定服务器,则可能使用默认后端。如果您配置多个后端,则没有什么可以阻止它们指向同一 Web 服务器。
答案2
恐怕这不是您真正想要/需要的。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
可以有更多后端位于不同的服务器上...我只是遵循示例;-)