忽略 haproxy 主机头匹配中的端口号

忽略 haproxy 主机头匹配中的端口号

使用 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

相关内容