HAproxy - 添加后端服务器的路径

HAproxy - 添加后端服务器的路径

我将 HAproxy 设置为 NAS 上的反向代理,因为我想使用易于记忆的子域,而不是通过端口号引用 NAS 上的应用程序。

我设法让它工作,除了少数后端“服务器”,这些服务器不仅引用端口,而且引用特定路径。

例如我想要nav.mydomain.com指向后端127.0.0.1:9000/modules/navigator/www/login.phphttps://unix.stackexchange.com/posts/420303/edit

我的第一个想法是像这样配置后端

frontend http-in
   bind *:80
   mode http

   acl nav hdr_beg(host) -i nav
   use_backend nav_node if nav

backend nav_node
   mode http
   server nav-server 127.0.0.1:9000/modules/navigator/www/login.php check

但显然,事情并不那么简单......所以我又花了几个小时研究如何处理这个问题,并发现了关于 reqrep 的主题,这对我来说相当中文......这就是为什么我决定在这里注册以获得一些帮助弄清楚这一点。

现在我只是想让它工作,在稍后的阶段我将(尝试)添加 SSL。

答案1

这些要求通常太麻烦而难以清楚理解。您可以使用set-path

http-request set-path /modules/navigator/www%[path]

在前端或后端。然后你就会得到/modules/navigator/www/login.php是否/login.php有要求。如果您愿意,您还可以重写/请求。/login.php

答案2

一直在尝试 reqrep 直到找到一个有效的命令。我不太明白所有这些角色的作用,可能有些太多了,但它有效!

reqrep ^([^\ :]*)\ /(.*)     \1\ /modules/navigator/www/\2 
server nav-server 127.0.0.1:9000 check

答案3

首先,我认为您不需要一个目录(即/在虚拟主机 nav.example.com 上)来请求 login.php URL。当/whatever请求eg时会发生什么?应该转发到吗/modules/navigator/www/login.php/whatever?或许这只是一条/modules/navigator/www/路;如果需要的话,那里的空请求可能会被重写/login.php

假设,您需要重写//modules/navigator/www/.所以:

server nav-server 127.0.0.1:9000 check
reqrep ^GET\ /(.*) GET\ /modules/navigator/www/\1

^是行的开头,因此路径会添加到开头。

相关内容