使用 haproxy-1.5,我有以下部分配置:
acl is_api hdr(host) -i api.example.com
acl is_app hdr(host) -i app.example.com
不幸的是,上面的内容与如下请求不匹配:
GET / HTTP/1.1
Host: api.example.com:80
据我所知,我需要做:
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
呃。不!讨厌!
有没有更好的方法可以做到这一点? 我可以告诉 haproxy 忽略主机头中的端口吗?
答案1
您可以通过检查 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
但请小心,因为我相信这也会匹配“otherstuff.api.example.com”之类的内容。
答案2
为了解决这个问题,我在前端使用了这个:
http-request set-header host %[hdr(host),field(1,:)]
这不会匹配多余的 URL 并且不依赖于正则表达式。
从https://discourse.haproxy.org/t/strip-port-in-host-header/4414/10