HAProxy和URL重写配置

时间:2011-11-20 15:34:22

标签: regex wordpress url-rewriting nginx haproxy

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

为了概述我的设置,我有HAProxy机器和两个后端:

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

用例:

我希望根据网址路由请求:

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

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

从我如何理解配置文档和网上的一些帖子,我可以使用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后端收到的请求仍然是原始网址“x / lang / blog”。

我可能在正则表达式部分遗漏了一些内容,但我主要担心的是我的理解是否正确使用reqirep。我将不胜感激任何帮助。

非常感谢。

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:0)

如果仍然无法切换到稳定版本,例如截至目前,reqrep在1.5开发中被打破。切换到1.4修复。