в среде разработки мне нужно получить доступ к моему клиенту и ко всем моим внутренним службам, используя 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 build -t haproxy-local . && docker run --rm -p80:80 haproxy-local
Мой угловой клиент запускается на хост-компьютере через порт 4200. Моя серверная служба работает через порт 8080. Если я захожу на http://localhost:80, мой веб-клиент открывается в веб-браузере. К сожалению, если я попытаюсь получить доступ к серверной части, используя http://localhost/api-my-backend-service/123 не работает. Если я изменю его на
default_backend api-backend
Я могу получить доступ к серверной части через http://localhost/api-my-backend-service/12 но не клиент.
Таким образом, доступ к обоим бэкендам, кажется, работает, потому что, если я изменю бэкэнд по умолчанию, я смогу получить доступ как к клиенту, так и к бэкенду API. Но use_backend, похоже, не совпадает, и я не могу понять, почему.
Любые идеи?
Спасибо Мейнерт