haproxy 如何重写部分URL?

阅读 5.9k
评论 2017-02-24 提问
    2 个回答

    @youyu岁月
    试验了,上面的方法不行,URL并没有被重写,后端收到的还是 /old 。

    参照官网给的例子( https://www.haproxy.com/doc/a... )好用了,但实现稍有不同,我把新旧路径后面的 / 去掉了。
    由于后端真实服务器没有 /old,如果完全按照官网文档写成

    ^([^\ ]*)\ /old/(.*)         \1\ /new/\2

    当访问 http://www.example.com/old 时,后端返回 404。要解决这个问题还需要增加 http-request redirect 语句来补齐 /
    ( https://www.haproxy.com/doc/a... )

    最后的配置:

    frontend web80
        bind *:80
        
        acl domain_www_example_com hdr_beg(host) -i www.example.com example.com
        acl url_old                url_beg       -i /old
    
        reqirep ^([^\ ]*)\ /old(.*)        \1\ /new\2  if domain_www_example_com url_old
        use_backend example_com                        if domain_www_example_com
    

    按照最后的配置,haproxy 的重写表现跟 nginx 不同:

    评论 赞赏 2017-02-24

      一直没有用过haproxy,刚刚看了下haproxy的文档,上面有个关于http rewriting的章节,看完之后试着写下,因为本地没有haproxy环境,不知道是否可以。单说rewrite阶段,我觉得可能需要这样写

      reqrep ^\ /OLD(.*) \ /NEW\1
      
      评论 赞赏 2017-02-24
        撰写回答

        登录后参与交流、获取后续更新提醒