12

我想问一下 HAProxy 如何根据 URL 的各个部分来帮助路由请求。

为了让您大致了解我的设置,我有 HAProxy 机器和两个后端:

  • IIS 网站(主站点)
  • NGINX 上的 Wordpress 博客(一个子站点)

用例:

我期望根据 URL 路由请求:

  • www.website.com/lang/index.aspx -> 主站点
  • www.website.com/lang/blog/articlexx -> 博客子站点

博客访问 URL 是“ /server/blog/lang/articlexx ”,所以我必须将原始客户端请求重写为该格式——这基本上是切换“博客”和“语言”。

根据我对配置文档和网上一些帖子的理解,我可以使用 reqrep/reqirep 在将请求 HTTP 标头传递到后端之前更改它。如果这是正确的,那么这个配置应该可以工作:

frontend vFrontLiner
    bind            x.x.x.x:x
    mode            http
    option          httpclose
    default_backend iis_website

    # the switch: x/lang/blog -? x/blog/lang
    reqirep ^/(.*)/(blog)/(.*) /if\2/\1/\3

    acl blog path_beg -i /lang/blog/

    use_backend blog_website if blog


backend blog_website
    mode    http
    option  httpclose
    cookie  xxblogxx insert indirect nocache
    server  BLOG1 x.x.x.x:80 cookie s1 check inter 5s rise 2 fall 3
    server  BLOG2 x.x.x.x:80 cookie s2 check inter 5s rise 2 fall 3 backup

问题: blog_website 后端收到的请求仍然是原始 URL “x/lang/blog”。

我可能错过了正则表达式部分的某些内容,但我主要关心的是我的理解是否正确,首先要使用 reqirep。我将不胜感激任何帮助。

非常感谢。

4

2 回答 2

9

您的正则表达式错误,您假设服务器位于请求路径中。要匹配标头中的请求路径,请使用如下正则表达式:

reqrep ^([^\ ]*)\ /lang/blog/(.*) \1\ /blog/lang/\2

您也可以使用 reqirep ,但这仅在您的服务器也实际提供服务时才有用/BLog/lAnG/

于 2012-01-31T16:13:45.377 回答
0

如果这仍然不起作用,请切换到稳定版本,例如到目前为止 reqrep 在 1.5 dev 中已损坏。切换到 1.4 进行修复。

于 2012-12-13T04:34:34.747 回答