haproxy use_backend path_reg不匹配

时间:2018-04-18 15:11:25

标签: haproxy

在开发环境中,我需要使用localhost:80访问我的客户端和所有后端服务。因此,我想使用haproxy将请求映射到正确的服务。

我创建了以下Dockerfile来启动haproxy:

FROM haproxy:1-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

我的haproxy.cfg文件如下所示:

defaults
  timeout client        30s
  timeout server        30s
  timeout connect       30s

frontend MyFrontend
  bind  *:80
  acl url_api path_reg ^/api-.*
  use_backend api-backend if url_api
  default_backend web-backend

backend api-backend
    mode            http
    server      backend host.docker.internal:8080

backend web-backend
    mode            http
    server      client host.docker.internal:4200

我使用以下命令启动docker机器:

docker build -t haproxy-local . && docker run --rm -p80:80 haproxy-local

我的角度客户端在端口4200上的主机上启动。我的端口8080上的后端服务正在运行。如果我访问http://localhost:80,我的Web客户端将在Web浏览器中打开。不幸的是,如果我尝试使用http://localhost/api-my-backend-service/123访问后端,则无效。如果我将其更改为

default_backend api-backend

我可以通过http://localhost/api-my-backend-service/12访问后端,但不能访问客户端。

因此,对两个后端的访问似乎都有效,因为如果我更改默认后端,我可以访问客户端和api后端。但是use_backend似乎不匹配,我无法弄清楚原因。

有什么想法吗?

由于 迈内特

2 个答案:

答案 0 :(得分:0)

作为一种解决方法,我切换到nginx,它可以用作反向代理,这足以满足我的需求。

但我仍然对上述问题的原因感兴趣。

答案 1 :(得分:0)

我有一个类似的问题陈述,这就是我的解决方法:

例如:

Angular routes supported in my app :
'login', 'h/dashboard' in which case my url would be 
localhost:4200/#/login, localhost:4200/#/h/dashboard

这些路由将在其相应的角度组件中对我的springboot进行后续的http调用。

localhost:4200/#/login -> localhost:8082/login
localhost:4200/#/h/dashboard -> localhost:8082/api/dashboard

在8082上具有@Restcontroller端点为'/login', '/api/**'

frontend myApp
  bind 127.0.0.1:9090
  mode http
  acl acl_proxyUi path_reg ^login$
  acl acl_proxyUi2 path_reg ^h/..*$  
  acl acl_proxyWeb path_reg ^/api/..*$
  acl acl_proxyWeb2 path_reg ^/login$

  use_backend app-web if acl_proxyWeb or acl_proxyWeb2
  use_backend app-ui if acl_proxyUi or acl_proxyUi2 
#  default_backend app-web
  default_backend app-ui

backend app-web
  mode http
  balance roundrobin
  server webserver 127.0.0.1:8082 


backend app-ui
  mode http
  balance roundrobin
  server nodeserver 127.0.0.1:4200 

请注意,在有角度的应用程序-> 之前中,使用 haproxy ,我将url端点用于localhost的springboot调用: 8082 /登录。 (包括 haproxy )后,已更改为localhost: 9090 / login,代理将负责路由到springboot应用。 >