
我目前有一個包含多個子網域的 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
可以有更多的後端在不同的伺服器上結束......我只是按照這個例子;-)。