反向代理多个不同的docker化HTTPS服务

反向代理多个不同的docker化HTTPS服务

我有两个服务,都经过了精心的 Docker 化,每个服务都有自己的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 证书jrcs/letsencrypt-nginx-proxy-companion

相关内容