【发布时间】:2018-07-10 21:53:03
【问题描述】:
在开发环境中,我需要使用 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
我的 Angular 客户端在 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 似乎不匹配,我无法弄清楚原因。
有什么想法吗?
谢谢 迈纳特
【问题讨论】:
标签: haproxy