![HAProxy 将 URI 转发到另一台服务器的根目录](https://linux22.com/image/635250/HAProxy%20%E5%B0%86%20URI%20%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%A0%B9%E7%9B%AE%E5%BD%95.png)
我使用 HAProxy 容器作为虚拟 HPC 集群的入口点。根据前缀,请求被转发到不同的容器。
:80/foswiki/ -> :80/foswiki/ :80/基巴纳/-> :80/基巴纳/ :80/石墨-api/->:80/石墨-api/ ...
我使用的配置非常简单:
前端 http-in 绑定 *:80 acl uri_foswiki path_beg /foswiki use_backend srv_foswiki 如果 uri_foswiki # GitLab default_backend srv_gitlab 后端 srv_foswiki 平衡循环赛 cookie SERVERID 插入 选项 httpclose 期权远期 服务器 foswiki 172.17.0.3:80 cookie
问题是,有些网络服务器直接以 root 身份为网站提供服务,不需要前缀。例如“Graphite-web”或 gitlab 图像。
我尝试剪切前缀并进一步转发,但我真正想要的是 HAProxy 将前缀保留在路径中,并且对后端服务器透明。如果我单击“gitlab_server:80/dashboard/”,它应该显示为“frontend_ip:80/gitlab/dashboard”。
后端 srv_gitlab 平衡循环赛 #cookie SERVERID 插入 模式 http reqrep ^([^\ ]*)\ /gitlab/(.*) \1\ /\2 平衡循环赛 期权远期 服务器 gitlab 172.17.0.18:80 cookie
我不认为这是一件难事,但我觉得我的谷歌技能有点欠缺。每次我最终得到的都是不保留前缀的重写规则。
有人吗?基督教徒
编辑:用户无法访问内部 IP 地址...
答案1
要删除 URI 的前导部分,请尝试
reqrep ^(GET|POST)\ /gitlab/(.*) \1\ /\2
即,将HTTP method
into\1
和 gitlab 根目录下面的路径提取出来\2
,然后将它们连接到完整的请求。
请注意,这可能不适用于许多应用程序,因为应用服务器不知道客户端应该从虚拟gitlab/
根目录内部请求所有内容。因此,重定向显然会“剥离”重要的根目录。
这种情况更容易解决,nginx
例如mod_proxy甚至是 Apache。