【发布时间】:2012-01-02 09:45:35
【问题描述】:
我想问一下 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。我将不胜感激。
非常感谢。
【问题讨论】:
-
看完这篇文章后,我开始意识到上面的解决方案是不可能的。 serverfault.com/questions/189916/…
-
您不想根据 HaProxy 选择的后端服务器更改 URL。您的切换完全是使用
use_backend完成的,所以问题只是路径重写,而不是后端切换。重写也可以在后端完成。
标签: regex wordpress url-rewriting nginx haproxy