У меня есть два сервиса, оба аккуратно докеризованы, каждый со своим собственным 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.