代理所有流量而无需在 Haproxy 中匹配域名

代理所有流量而无需在 Haproxy 中匹配域名

我在 VPS 中使用 Haproxy 来传输一些视频内容。根据我当前的设置,我需要在 Haproxy.conf 文件的前端和后端部分中提及每个域。如果我需要观看 10 个频道,我需要添加许多域。我只将此代理用于某些流媒体网站,而不是用于所有网络流量。我在我的 openwrt 路由器上安装了 Dnsmasq,我只能将必要的域指向我的 VPS。我只需要为 dnsmasq 添加条目,我需要 Haproxy 代理 dnsmasq 抛出的所有内容。我可以在 Haproxy 配置中配置通配符之类的东西吗?或者还有其他方法吗

我的 haproxy.conf 像这样

# Frontend for connections over port 80/http
frontend f_sni_catchall  
    mode http
    bind 0.0.0.0:80
    log global
    option httplog
    option accept-invalid-http-request
    capture request  header Host len 50
    capture request  header User-Agent len 150

    use_backend b_sni_catchall      if { hdr(host) -i www.example.com }

    default_backend b_deadend

# Backend for handling connections over port 80/http
backend b_sni_catchall  
    log global
    mode http
    option httplog
    option http-server-close


    server www.example.com www.example.com:80 check inter 10s fastinter 2s downinter 2s fall 1800

我需要使用类似这样的通配符,而不是使用 www.example.com

use_backend b_sni_catchall      if { hdr(host) -i *.com }

server*e.com *.com:80 check inter 10s fastinter 2s downinter 2s fall 1800

由于 DNS 解析问题,无法在配置文件中使用完整域名。Haproxy 无法从某些域名启动。除此之外,我需要使用 dnsmasq 或 Bind 设置 DNS 指向。为此,我需要将 haproxy 配置为转发从用户那里获得的所有域

答案1

正如前面提到的,为了得出结论,我们需要知道您的版本,因为配置格式在版本之间发生了变化,但这是我的操作方式(1.6.3)

frontend web
    bind *:80 name http

    ### Wildcard ACL ###
    acl is_wild hdr_dom(host) -i wild

    ### Wildcard Backend###
    use_backend wild if is_wild


backend wild
    cookie  WILD_HTTP insert
    server  wild 10.1.1.1:80 cookie A check

正如您所见,不需要 *,任何匹配的内容(即 wild.mydomain.com、mydomain.wild.com、something.mewild.com)都将发送到此 acl,然后使用所需的后端映射。

相关内容