pfsense haproxy 重定向不匹配 url

pfsense haproxy redirect unmatched to url

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

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

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

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

我试过设置默认后端,但显示的后端是错误的 URL/subdomain。

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

我正在经历:

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 获得这个?

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 "allows"这个配置,但是不起作用,因为:

[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 条规则之后。

但是,HAProxy 在后端部分也支持 http-request redirect,因此您可以推迟对 http-request redirect 的解释,方法是将其放在后端部分中,该后端部分的存在仅用于捕获未捕获的任何内容通过 use_backend

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

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没有特殊意义。这只是这个新后端的任意标签。