使用 haproxy-1.5,我有以下部分配置:
acl is_api hdr(host) -i api.example.com
acl is_app hdr(host) -i app.example.com
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的请求与如下所示的请求不匹配:
GET / HTTP/1.1
Host: api.example.com:80
Run Code Online (Sandbox Code Playgroud)
据我所知,我需要这样做:
acl is_api hdr(host) -i api.example.com
acl is_api hdr(host) -i api.example.com:80
acl is_app hdr(host) -i app.example.com
acl is_app hdr(host) -i app.example.com:80
Run Code Online (Sandbox Code Playgroud)
啊。不!恨!
有没有更好的方法来做到这一点?我可以告诉 haproxy 忽略主机头中的端口吗?
您可以通过检查 hdr_dom ( https://code.google.com/p/haproxy-docs/wiki/MatchingLayer7 ) 而不是 hdr来使其工作:
acl is_api hdr_dom(host) -i api.example.com
acl is_app hdr_dom(host) -i app.example.com
Run Code Online (Sandbox Code Playgroud)
请小心,因为我相信这也会匹配“otherstuff.api.example.com”之类的内容。