【问题标题】:HAProxy - Add Trailing SlashHAProxy - 添加尾部斜杠
【发布时间】:2018-11-18 23:14:36
【问题描述】:

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

例如,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

【问题讨论】:

    标签: redirect haproxy


    【解决方案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,因为它们也更适合更复杂的操作。

    【讨论】:

    • 这很完美!非常感谢您对文档的详细回复和参考。我已经接近了,但还没有尝试过这种方法。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 2012-08-03
    • 2012-09-25
    • 2012-07-06
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多