所以基本上我在单个 ubuntu 服务器上分别在端口 5000 和 30000 上运行 2 个不同的应用程序。这两个应用程序都必须使用 haproxy 进行映射。
我到目前为止已经尝试过
frontend http-in
mode http
bind *:80
bind *:443 ssl crt /etc/ssl/private/mydomain.pem
http-request redirect scheme https code 301 if !{ ssl_fc }
acl path-employeeList path_beg -i /ProcessDesigner
use_backend backend1 if path-employeeList
acl path-employeeListfinal path_beg -i /ProcessCore
use_backend backend2 if path-employeeListfinal
backend backend1
mode http
option httplog
option forwardfor
reqrep ^([^\ :]+)\ /ProcessDesigner/?(.*)$ \1\ /\2
server backend1 206.189.22.155:30000
backend backend2
mode http
option httplog
option forwardfor
reqrep ^([^\ :]+)\ /ProcessCore/?(.*)$ \1\ /\2
server backend2 206.189.22.155:5000
现在这里的 /ProcessDesigner 和 /ProcessCore 只是一个别名/虚构的名字。目前https://206.189.22.155/ProcessDesigner只显示部分输出(我的意思是由于 503 错误服务不可用,页面的某些部分无法加载)并且第二个应用程序在https://206.189.22.155/ProcessCore也没有显示任何输出。(只是一个白色的空白屏幕)。
注意:如果我将下面提到的行添加到我的前端
acl path-employeeListnew path_beg -i /
use_backend backend1 if path-employeeListnew
那么在这种情况下,应用程序https://206.189.22.155/ProcessDesigner工作正常,我可以看到完整的输出。但这个修复不是一个正确的修复,因为现在如果我点击https://206.189.22.155/ProcessCore我收到 404 not found 错误。唯一的情况是 https://206.189.22.155/ProcessCore当我使用以下配置时,效果很好-
frontend http-in
mode http
bind *:80
bind *:443 ssl crt /etc/ssl/private/mydomain.pem
http-request redirect scheme https code 301 if !{ ssl_fc }
acl path-employeeListnew path_beg -i /
use_backend backend2 if path-employeeListnew
acl path-employeeListfinal path_beg -i /ProcessCore
use_backend backend2 if path-employeeListfinal
backend backend2
mode http
option httplog
option forwardfor
reqrep ^([^\ :]+)\ /ProcessCore/?(.*)$ \1\ /\2
server backend2 206.189.22.155:5000
因此,在任何给定时间,我只能映射单个应用程序,而不能映射多个应用程序。请帮忙,因为我认为应用程序本身没有什么需要更改的,而是我认为我的 haproxy 配置有问题。
答案1
虽然根据你提供的信息不可能确切知道,但我想说,绝大多数情况下,你做必须更改应用程序,写出具有正确路径信息的相对 URL,以便访问它们。某些资源在通过子路径代理时无法加载,这表明它们使用的是绝对路径,而当通过子路径访问应用程序时,绝对路径是不正确的。