在 Synology NAS 上架設 Nginx Proxy Manager:反向代理 + 自動 HTTPS 完整教學
當你的 NAS 上跑了多個 Docker 服務,每個都有自己的 Port 號,久了就會很難記:Vaultwarden 是 8888、Immich 是 2283、AdGuard 是 3000⋯⋯
Nginx Proxy Manager(NPM)解決這個問題:你只需要一個對外 Port(80/443),讓 NPM 根據網域名稱把流量分發到對應的服務,同時自動申請和續約 Let's Encrypt SSL 憑證。
一個圖形介面,管理所有服務的反向代理和 HTTPS,不需要手動編輯任何 nginx 設定檔。
🎯 這篇適合誰
| 你的情況 | 建議先看哪段 |
|---|---|
| 想先了解反向代理是什麼 | 先看「反向代理在做什麼」 |
| 直接看安裝步驟 | 跳到「安裝步驟」 |
| 想把服務掛上自訂網域 | 跳到「新增代理主機」 |
| 想設定 SSL 憑證 | 跳到「設定 HTTPS」 |
🔀 反向代理在做什麼
沒有反向代理時,你的服務長這樣:
http://192.168.1.100:8888 → Vaultwarden
http://192.168.1.100:2283 → Immich
http://192.168.1.100:3000 → AdGuard Home
加了 Nginx Proxy Manager 之後:
https://vault.yourdomain.com → Vaultwarden(有 HTTPS)
https://photos.yourdomain.com → Immich(有 HTTPS)
https://adguard.yourdomain.com → AdGuard Home(有 HTTPS)
NPM 接收所有進來的連線,根據你設定的網域名稱決定把流量轉發到哪個 Port,並自動處理 SSL 加密。
📋 安裝前準備
- Synology DSM 7.2 以上,已安裝 Container Manager
- 對外存取(申請 HTTPS)需要:一個你管理的網域(可以是 Cloudflare 等 DNS 服務),以及路由器開放 Port 80 和 443 對外
如果你不想開放連接埠,可以考慮 Cloudflare Tunnel,不需要 NPM 也能有 HTTPS。NPM 更適合你已有網域、且可以開連接埠的場景。
🛠️ 安裝步驟
1. 建立資料夾
/volume1/docker/nginx-proxy-manager/
├── data/
└── letsencrypt/
2. 建立 docker-compose.yml
version: "3"
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports:
- 80:80
- 443:443
- 81:81
volumes:
- /volume1/docker/nginx-proxy-manager/data:/data
- /volume1/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
restart: always
Port 說明: - 80:HTTP 流量入口 - 443:HTTPS 流量入口 - 81:NPM 管理後台
3. 啟動容器
Container Manager → 專案 → 建立,或 SSH:
cd /volume1/docker/nginx-proxy-manager
docker compose up -d
4. 登入管理後台
瀏覽器開啟 http://NAS的IP:81
預設帳號:
- Email:admin@example.com
- 密碼:changeme
第一次登入後請立刻修改帳號和密碼。
🌐 新增代理主機
假設你要把 vault.yourdomain.com 代理到本機的 Vaultwarden(Port 8888):
- 後台 → Proxy Hosts → Add Proxy Host
- Domain Names:填入
vault.yourdomain.com - Scheme:
http(NPM 到後端服務是內部連線,不需要 HTTPS) - Forward Hostname / IP:填 NAS 的 IP(例如
192.168.1.100) - Forward Port:
8888 - 點 Save
儲存後,所有打到 vault.yourdomain.com 的流量就會被轉發到 Vaultwarden。
🔒 設定 HTTPS
NPM 可以自動向 Let's Encrypt 申請免費 SSL 憑證:
- 編輯剛才建立的代理主機
- 切換到 SSL 分頁
- SSL Certificate 選擇 Request a new SSL Certificate
- 勾選 Force SSL(強制 HTTP 轉到 HTTPS)
- 填入你的 Email(Let's Encrypt 通知用)
- 點 Save
NPM 會自動向 Let's Encrypt 申請憑證,通常幾秒內完成。憑證快到期時也會自動續約。
申請憑證需要 Let's Encrypt 能從外部驗證你對該網域的所有權(Port 80 必須對外開放),或使用 DNS 驗證。若使用 Cloudflare 管理 DNS,可以用 DNS Challenge 不需要開 Port。
🔧 搭配 Cloudflare DNS
如果你的網域在 Cloudflare,推薦這個設定:
- 在 Cloudflare DNS 新增 A 記錄,指向你的家裡 IP
- 把 Proxy 狀態設為 DNS only(灰色雲朵),讓 Let's Encrypt 驗證通過
- NPM 申請完憑證後,再改回 Proxied(橘色雲朵)
或者直接用 Let's Encrypt 的 DNS Challenge,在 NPM 填入 Cloudflare API Token,就不需要開 Port 80。
📋 實際使用範例
以下是一個完整的多服務設定範例:
| 網域 | 轉發到 | 說明 |
|---|---|---|
vault.domain.com |
192.168.1.100:8888 |
Vaultwarden |
photos.domain.com |
192.168.1.100:2283 |
Immich |
nas.domain.com |
192.168.1.100:5000 |
DSM 管理介面 |
ha.domain.com |
192.168.1.100:8123 |
Home Assistant |
每個服務各自有網址,全部都有 HTTPS,不需要記 Port。
❓ 常見問題
Q1:NPM 和 Synology 的反向代理有什麼差?
DSM 內建的反向代理(控制台 → 登入入口)功能較基本,不支援自動申請 Let's Encrypt、不支援多網域管理介面。NPM 在彈性和功能上更完整,適合管理多個自架服務。
Q2:開了 Port 80/443,安全嗎?
風險存在,但可以管控。建議: - 在 NPM 後台開啟 Access Lists,限制特定 IP 才能存取管理介面 - 使用 Cloudflare Proxy(橘色雲朵),讓流量先過 Cloudflare 的 WAF 保護 - 不要把不必要的服務暴露出去
Q3:NPM 和 Cloudflare Tunnel 哪個比較好?
取決於需求: - Cloudflare Tunnel:不需要開連接埠,設定簡單,適合不想管防火牆的人 - NPM:需要開 Port,但可以完全掌控流量,適合進階需求(自訂 nginx 設定、Access Lists、本地網路直連)
兩者也可以並用:內部網路走 NPM,對外走 Cloudflare Tunnel。
Q4:憑證申請失敗怎麼辦?
最常見原因是 Port 80 沒有對外開放,或 DNS 還沒有指向你的 IP。確認這兩件事後再試。NPM 的 logs 裡會有具體的錯誤訊息可以參考。如果不確定某個 port 是否真的對外開放,可以在 PowerShell 執行 Test-NetConnection -ComputerName 你的WAN IP -Port 80 直接驗證。
✨ 總結
Nginx Proxy Manager 是自架服務玩家的基礎設施之一。一旦設好,你的所有服務都有乾淨的網址和 HTTPS,管理起來也清晰很多。
搭配 Cloudflare 管理 DNS,可以進一步加上 CDN 保護和自動憑證申請,讓整個架構更完整。
🔗 延伸閱讀
- Cloudflare Tunnel:不開連接埠也能對外暴露服務
- Synology Container Manager 完整教學
- Vaultwarden 自架密碼管理器教學
- NAS 上值得自架的 Docker 服務清單