反向代理多個不同的 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 代理,它提供自動化反向代理功能,並且具有簡單的 docker-compose 整合(您只需要指定幾個環境變數:運行服務的連接埠和可用服務的網域)。

您也可以使用以下命令自動產生 Let's Encrypt 證書jrcs/letsencrypt-nginx-proxy-companion

相關內容