我有两个服务,都经过了精心的 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。