haproxy转发到另一台服务器的根

我使用HAPROXY容器作为虚拟HPC群集的入口点。 根据前缀,请求被转发到不同的容器。

 :80 / foswiki /  - >:80 / foswiki /
 :80 / kibana /  - >:80 / kibana /
 :80 / graphite-api /  - >:80 / graphite-api /
 ...

我使用的configuration非常简单:

前端http-in
    绑定*:80
     acl uri_foswiki path_beg / foswiki
     use_backend srv_foswiki if uri_foswiki
     #gitlab
     default_backend srv_gitlab

后端srv_foswiki
    平衡roundrobin
     cookie SERVERID插入
    选项httpclose
    选项forwardfor
    服务器foswiki 172.17.0.3:80 cookie

问题是有没有前缀直接作为根服务的网站服务器。 'Graphite-web',例如gitlab图像。

我试图削减前缀,并进一步转发,但我真正想要的是,haproxy保留在path中的前缀,并对后端服务器是透明的。 如果我点击“gitlab_server:80 / dashboard /”,它会出现为“frontend_ip:80 / gitlab / dashboard”。

后端srv_gitlab
    平衡roundrobin
     #cookie SERVERID插入
    模式http
     reqrep ^([^ \] *)\ /gitlab/(.*)\ 1 \ / \ 2
    平衡roundrobin
    选项forwardfor
    服务器gitlab 172.17.0.18:80 cookie

我不认为这是一件很难的事情,但在我看来,我的谷歌技能有些跛脚。 每次我结束重写规则,不保留前缀。

任何人? 基督教

编辑:内部IP地址不可达由用户…

为了摆脱URI的主要部分,请尝试

 reqrep ^(GET|POST)\ /gitlab/(.*) \1\ /\2 

即将HTTP method提取到\1 ,将gitlab根目录下的path提取到\2 ,然后将它们链接到一个完整的请求。

请注意,这可能不会削减它的许多应用程序,因为应用程序服务器不知道客户端应该从虚拟gitlab/根目录内的一切请求。 因此,redirect将显然“剥离”重要的根目录。

这样的场景更容易解决,比如用nginx和mod_proxy甚至Apache。