Обратное проксирование нескольких различных подключаемых по протоколу HTTPS сервисов

У меня есть два сервиса, оба аккуратно докернизированы, каждый со своим docker-compose.yml,

Каждый сервис имеет свое доменное имя.

Обе службы используют HTTPS и имеют сертификаты Lets Encrypt.

Оба сервиса полностью автономны и слушают на 80 и 443.

.--[http]-[https]--.    .--[http]-[https]--.
|                  |    |                  |
|    Service A     |    |    Service B     |
|                  |    |                  |
'------------------'    '------------------'

Как настроить обратный прокси-сервер, чтобы я мог запускать обе службы на одном хосте?

.--------------[http]-[https]--------------.
|                                          |
|              REVERSE PROXY               |
|                                          |
'---+--------+---------------+--------+----'
    |        |               |        |
   http     https           http     https
   req.     req.            req.     req.
   domainA  domainA         domainB  domainB
     |        |              |        |
     V        V              V        V
.--[http]-[https]--.    .--[http]-[https]--.
|                  |    |                  |
|    Service A     |    |    Service B     |
|                  |    |                  |
'------------------'    '------------------'

Я хотел бы, чтобы услуги были автономными. Т.е. я хотел бы избежать извлечения сертификатов из сервисных контейнеров.

Из моих экспериментов кажется, что nginx не может пересылать HTTPS-запросы без сертификатов, хотя кажется, что этого можно добиться. Возможно с другим программным обеспечением обратного прокси?

У меня есть контроль над обеими службами docker-compose.yml, Я могу изменить порты и так далее, если это необходимо.

В идеале я хотел бы найти простого демона, который принимает конфигурацию, которая выглядит примерно так:

[service a]
domain: domainA.tld
localPort: 8080

[service b]
domain: domainB.tld
localPort: 8081

Я искал как сумасшедший, но не нашел такого инструмента.

1 ответ

Вы можете использовать jwilder / nginx-proxy, который предлагает автоматизировать функцию обратного прокси и поставляется с простой интеграцией docker-compose (вам нужно только указать пару переменных среды: порты, на которых работает служба, и домен, в котором услуга будет доступна).

Вы также можете автоматизировать создание сертификата Let's Encrypt с помощью https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-companion/.

Другие вопросы по тегам