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

Обратное проксирование нескольких различных докеризованных 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-прокси, который предлагает автоматическую функциональность обратного прокси-сервера и поставляется с простой интеграцией docker-compose (вам нужно указать только пару переменных среды: порты, на которых запущена служба, и домен, на котором служба будет доступна).

Вы также можете автоматизировать генерацию сертификата Let's Encrypt с помощьюjrcs/letsencrypt-nginx-proxy-companion.

Связанный контент