我将 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
^
是行的开头,因此路径会添加到开头。