前言

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

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

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

事前配置

1. 開啟 80、443 端口

前往路由器設定,確保 80443 端口已經開啟,以便讓 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,以及關閉路由器的 80443 Port,即完成內網服務使用 SSL 憑證、不暴露公網且不影響現有公網 SSL 憑證。

Cloudflare_DNS_Intranet

5. 證書過期重新延長

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

Encrypt

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

Test

測試成功,再點 Renew Now

Success

結語

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

參考連結

快速上手 Docker 和 Docker Compose