HAProxy - 添加尾随斜杠

时间:2018-06-08 20:59:08

标签: redirect web haproxy

我正在开发一个项目,我需要将发往特定页面的请求路由到单独的后端。

例如,https://mycooldomain.com的所有请求都将转到后端“A”。但是,如果导航到https://mycooldomain.com/secretpage,我希望它转到后端“B”。

现在,我有这个工作,但遇到一个问题,我需要尾部斜杠才能正常工作。

所以,我需要一种方式来说明请求是否https://[whateverhostnameisused]/secretpage重定向到https://[whateverhostnameisused]/secretpage/

以下是我的配置示例:

frontend f_https
    bind *:443 ssl crt cert.pem
    reqadd X-Forwarded-Proto:\ https

    #define hosts
    acl host_a hdr(host) -i a.mycooldomain.com
    acl host_b hdr(host) -i b.mycooldomain.com
    acl host_c hdr(host) -i c.mycooldomain.com

    #custom acls
    acl secret path_beg -i /secretpage

    #Custom redirects

    ##define backend
    use_backend b_secret if secret
    use_backend b_a if host_a
    use_backend b_b if host_b
    use_backend b_c if host_c

    default_backend b_https

backend b_secret
    server secret 192.168.15.15:5575 check

1 个答案:

答案 0 :(得分:1)

看来你正在寻找这样的东西:

http-request redirect scheme https drop-query append-slash if { path -m str /secretpage }

如果应用于前端或后端,这应该有效。

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4.2-redirect%20scheme

仅指定方案是必要的,因为语法需要location | prefix | scheme之一,而另外两个选项,您必须自己在配置中重新组合URL。

另请注意,reqadd未正式弃用,但添加该请求标头的首选方法如下:

http-request set-header X-Forwarded-Proto https

请注意,未指定:,并且不得使用\转义标题名称后面的空格。这实现了相同的结果,但它在HAProxy中使用了不同的代码路径,并且应该是更有效的操作。您可能希望尽可能使用http-requesthttp-response指令代替reqxxxrspxxx,因为它们也更适合更复杂的操作。