我有兩個服務,兩個服務都經過了 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 代理,它提供自動化反向代理功能,並且具有簡單的 docker-compose 整合(您只需要指定幾個環境變數:運行服務的連接埠和可用服務的網域)。
您也可以使用以下命令自動產生 Let's Encrypt 證書jrcs/letsencrypt-nginx-proxy-companion。