我的HAproxy配置有点迷失。目前运行1.6.4。我们有一个系统,使用客户提供的SNI来确定后端。
这在过去一直运作良好,但是今天我已经在以下前端添加了use_backend
规则,但它无法按预期运行:
frontend fe_ssl
description "SSL Endpoint"
bind 1.2.3.4:443 ssl crt /etc/haproxy/certs/
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_t1 { ssl_fc_sni -i subdomain.domain.com }
use_backend bk_t2 { ssl_fc_sni -i subdomain-test.domain.com }
以前只有后端bk_t1是presend,它确实按预期工作:如果访问subdomain.domain.com
流量被转发到bk_t1,如果使用指向同一IP的任何其他名称,则会产生HTTP 503,因为没有匹配后端。
现在,在添加bk_t2后,它不会永远匹配前端配置中第二个提到的后端请求。含义:
如果首先定义bk_t1
,则无论是访问bk_t1
还是subdomain.domain.com
subdomain-test.domain.com
如果首先定义bk_t2
,则无论是访问bk_t2
还是subdomain.domain.com
subdomain-test.domain.com
我认为它可能与这两个子域部分相同但我无法找到任何需要转义“ - ”的信息有关,甚至可以从-i
切换到-m str
或将主机名放在引号中不会改变任何内容
答案 0 :(得分:1)
经过两个小时的故障排除并撰写此条目后,我意识到我的错误非常明显。要匹配的语句缺少if
。
use_backend bk_t1 **if** { ssl_fc_sni -i subdomain.domain.com }
use_backend bk_t2 **if** { ssl_fc_sni -i subdomain-test.domain.com }