1

我在 pfsense 上使用 haproxy,我有一些规则和 acls 设置似乎有效。

但是,对于不符合我的规则的子域,我会收到此错误:

503 Service Unavailable
No server is available to handle this request.

我正在尝试修复一个规则,该规则将捕获不匹配的请求并将其发送到我网站的根目录或指定位置。

我尝试设置默认后端,但这只会显示带有错误 URL/子域的后端。

我曾尝试设置主机正则表达式,但这会在不使用我现有规则的情况下重定向所有内容。

我正在经历:

domain1.com --> backend1
one.domain1.com --> backend1

domain2.com --> backend2
two.domain2.com --> backend2

three.domain.com --> "503 no server is available error" because no acl

期望:

domain1.com --> backend1
one.domain1.com --> backend1

domain2.com --> backend2
two.domain2.com --> backend2

three.domain1.com --> redirect to domain1.com  <-- need to redirect
wrongsubdomain.domain2.com --> redirect to domain2.com  <-- need to redirect

有谁知道如何只为503获得这个?

4

1 回答 1

3

frontend部分中,http-request redirect在过程的早期处理,所以你不能做这样的事情(你似乎已经尝试过,但没有成功)......

frontend web
    use_backend site1 if { hdr(host) -i site1.example.com }
    use_backend site2 if { hdr(host) -i site2.example.com }
    http-request redirect location https://site1.example.com 

HAProxy“允许”这种配置,但它不起作用,因为:

[WARNING] : parsing [/etc/haproxy/haproxy.cfg:xx] : a 'http-request' rule placed after a 'use_backend' rule will still be processed before.

use_backend规则总是推迟到http-request处理规则之后。

但是,HAProxyhttp-request redirect也支持后端部分,因此您可以http-request redirect通过将其放置在后端部分中use_backend来 推迟对

创建一个没有服务器的“虚拟”后端和一个重定向规则,并将该新后端设置为您的默认后端。

frontend web
    use_backend site1 if { hdr(host) -i site1.example.com }
    use_backend site2 if { hdr(host) -i site2.example.com }
    default_backend catchall

backend catchall
    mode http
    http-request redirect location https://site1.example.com 
    # no 'server' declared here

default_backend仅在没有use_backend匹配语句时使用,在它们都被考虑之后。它可以放置在frontend配置中的任何位置,因为它是最后自动评估的,当没有其他可能性时。

catchall没有特别的意义。这只是这个新后端的任意标签。

于 2019-10-16T19:22:27.320 回答