前言

在設定 Docker 服務時,可能需要為網站配置 SSL 憑證,才能正常使用。例如 Vaultwarden(開源的密碼管理),它會要求只能用 Https 才能登入。

即使服務沒有公開到網路上,在某些情況下也需要使用 SSL 憑證,所以才有這一篇教學,而且可以使用 XXX.mrpeelblog.com 來存取內部服務,就算其他人知道這個網址也沒辦法連線,因為他的 DNS 是指向內部 IP。

以下是設定的步驟,讓你在伺服器上啟用內網 SSL 憑證,同時不影響外網 SSL 憑證。

事前配置:

1. 開啟 80、443 端口

前往路由器設定,確保 80 和 443 端口已經開啟,以便讓 SSL 請求能夠通過。

Port_Forwarding

2. 設定 DNS

進入 Cloudflare,新增 A 記錄,並將 SSL 網址與公網 IP 設定連結起來。記得將 Proxy 功能關閉。如有多個域名,請重複此步驟。

Cloudflare_DNS

注意:公網 IP 設定是暫時的,是為了取得憑證用的。

3. 設定 Nginx Proxy Manager

打開 Nginx Proxy Manager,進入 SSL Certificates,並新增 Let’s Encrypt Certificate。在 Domain Names 欄位填寫您想要設定的 SSL 網址。如果有多個域名,請重複此步驟。

點選 Test Server Reachabilty 確保連線沒問題後,勾選同意條款新增憑證。

NPM_SSL

回到 Dash Board,新增 Proxy Host,Domain Names 填要設定 SSL 的網址;Forward Hostname / IP 填內網 IP;Forward Port 填服務的 Port。

NPM_Host

SSL 部分就選擇剛剛新增的 SSL 網址,打勾 Force SSL、HTTP/2 Support 新增憑證網址。

NPM_Host_SSL

4. 再次修改 DNS 設定

回到 Cloudflare,將 SSL 網址的公網 IP 改回內網 IP,以及關閉路由器的 80、443 Port,即完成內網服務使用 SSL 憑證、不暴露公網且不影響現有公網 SSL 憑證。

Cloudflare_DNS_Intranet

5. 證書過期重新延長

SSL 證書啟用時間 90 天,因為我們外網連不上所以無法自動延長,快要到期會寄信到 NPM 註冊的信箱,此時我們要手動延長時間。

Encrypt

Port Forwarding 打開 80 和 443,Cloudflare DNS IP 改成公網 IP。前往 NPM SSL 設定,對要延長的網域先 Test Server Reachability。

Test

測試成功,再點 Renew Now。

Success

結語

透過以上設定,可以讓一些需要 SSL 憑證服務可以正常使用。以及如果想要使用 PWA APP 的話,也要開啟 SSL 才能安裝。

參考資料

快速上手 Docker 和 Docker Compose