我在 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,然后使用所需的后端映射。