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