haproxy 如何重写部分URL?
比如:
原请求为 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@youyu岁月
试验了,上面的方法不行,URL并没有被重写,后端收到的还是 /old 。
参照官网给的例子( https://www.haproxy.com/doc/a... )好用了,但实现稍有不同,我把新旧路径后面的 / 去掉了。
由于后端真实服务器没有 /old,如果完全按照官网文档写成
当访问 http://www.example.com/old 时,后端返回 404。要解决这个问题还需要增加 http-request redirect 语句来补齐 /
( https://www.haproxy.com/doc/a... )
最后的配置:
按照最后的配置,haproxy 的重写表现跟 nginx 不同:
http://www.example.com/old,后端真实服务器收到的请求被重写为 /new/ ,并且浏览器收到 HTTP/1.1 302 Location: /new/ , 地址栏改为 http://www.example.com/new/
http://www.example.com/old/,或者 http://www.example.com/old/ab... 后端真实服务器收到的请求被重写为 /new/ ,但浏览器并没有收到 302 , 地址栏依旧为 http://www.example.com/old/
一直没有用过
haproxy
,刚刚看了下haproxy
的文档,上面有个关于http rewriting的章节,看完之后试着写下,因为本地没有haproxy
环境,不知道是否可以。单说rewrite阶段,我觉得可能需要这样写