有点奇怪的问题,我知道这不是理想的,但是仍然......
我目前有一个虚拟机,它使用 Apache 充当 Web 服务器。它托管几个不同的网站,由 Apache 和虚拟主机处理。
我想让某人试用 HA Proxy,将负载均衡器放在我的 Web 服务器上,将节点放在其他地方。我想知道的是:是否可以指示 HA Proxy 仅拦截针对特定 URL 的流量?显然,我将在一个 IP 上运行多个站点,其中只有一个需要通过 HA Proxy 进行路由。
干杯。
答案1
你能配置 haproxy 前端以通过acl
指令评估主机标头和/或 URI,并将流量转发到相应的后端。但是 haproxy 无法在同一 IP 地址上“共享”Apache 使用的 TCP 端口 (80) - 仅仅是因为 TCP 套接字的实现方式。您当然可以在 haproxy 中设置不同的前端 - 一个将流量定向到“nodes-elsewhere”后端,另一个用于您的本地 Apache 后端,如下所示acl
:
frontend all-sites
bind *:80
acl is_external hdr_end(host) -i www.externalplaysite.example.com
use_backend nodes-elsewhere if is_external
use_backend local-server if !is_external
backend nodes-elsewhere
server external-node1 1.2.3.4
server external-node2 2.3.4.5
backend local-server
server local-host 127.0.0.1:8080
但如果你想要别人“尝试使用 HAProxy”,他们可能也想尝试配置 - 这可能会破坏您的本地后端。因此,为您的 HAProxy 前端使用与 Apache 不同的 IP 地址和/或端口可能更容易。