HAProxy - 多个站点,多个 acl

HAProxy - 多个站点,多个 acl

我们正忙于设置 HAProxy。几乎所有东西都正常工作,只是设置时没有使用具有不同 acl 的多个站点。

我们想要的是:

在多个站点上使用 HAProxy,所有站点都位于同一 IP 上,都具有相同的后端,但具有不同的 IP 阻止/用户名密码保护。

我们正在做的:

将传入流量获取到后端(使用 acl 来使用 https 而不是 http)。

没有使用haproxy/varnish的情况:

现在,我们使用 apache 来处理 acl(允许、拒绝 ip 并使用用户名密码保护)。

我们尝试通过 apache 内部的 X-Forwarded-For 捕获此信息。但是,Web 服务器本身无法再相互通信。我们不得不删除子网的允许角色(负载均衡器和 Web 服务器位于同一子网中)。有了这个允许,apache 就不会查看 x-forward-header,并且会允许所有流量。没有它,Web 服务器就无法相互通信。

有没有人能为我们提供一个达到这一目标的榜样或思路?

现在:互联网->防火墙->apache

我们想要的:internet->firewall->haproxy(ssl卸载)->varnish->apache(haproxy 和 varnish 在同一台机器上运行)

答案1

有几种方法可以进行设置。最简单的方法可能是使用一些 acl。

例如。:

定义不同的网站

acl site1 hdr_end(host) site1.com
acl site2 hdr_end(host) site2.net
acl site3 hdr_end(host) site3.org

(我在主机头上使用了 hrd_end,这样任何子域以及没有子域的域都会匹配。当然,您需要确定这是否也是您情况下所期望的条件。)

定义站点允许的来源

acl allowed_site1 src 1.2.3.4/32 1.2.4.5/32
acl allowed_site2 src 2.3.4.5/32 3.4.5.0/24
acl allowed_site3 src 4.5.0.0/16

否认所有不匹配的内容

http-request deny if site1 !allowed_site1
http-request deny if site2 !allowed_site2
http-request deny if site3 !allowed_site3

(基本上,这意味着:如果请求是针对指定站点的,但不在允许的 IP 地址列表中,则拒绝该请求)

相关内容