haproxy 如何重写部分URL?

发布于 2022-09-04 13:40:01 字数 675 浏览 14 评论 0

比如:
原请求为 http://www.example.com/OLD/ab...
重定向到 http://www.example.com/NEW/ab...

haproxy 官网文档里有 HTTP redirection 章节
https://www.haproxy.com/doc/a...
但是没找到重写“部分URL”的方法。

而 nginx可以用 rewrite 实现:

server {
    listen 80;
    server_name www.example.com;
    location / {
        rewrite ^/OLD(.*)    /NEW$1 permanent;
        proxy_pass    http://backend_www_example_com;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪化雨蝶 2022-09-11 13:40:01

@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 不同:

水染的天色ゝ 2022-09-11 13:40:01

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

reqrep ^\ /OLD(.*) \ /NEW\1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文