我使用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。