一個圖形介面,管理所有自架服務的網域和 HTTPS。

Nginx Proxy Manager 讓你用圖形介面管理反向代理,自動申請 SSL 憑證。在 Synology NAS 安裝後,多個自架服務就能掛上自訂網域和 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 加密。

Nginx Proxy Manager 反向代理架構:網域請求統一進入 NPM,再轉發到對應服務


📋 安裝前準備

  • 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

第一次登入後請立刻修改預設帳號與密碼,並把管理介面 81 埠限制在內網或 VPN;不要將管理介面直接暴露到公網。


🌐 新增代理主機

假設你要把 vault.yourdomain.com 代理到本機的 Vaultwarden(Port 8888):

  1. 後台 → Proxy Hosts → Add Proxy Host
  2. Domain Names:填入 vault.yourdomain.com
  3. Scheme:http(NPM 到後端服務是內部連線,不需要 HTTPS)
  4. Forward Hostname / IP:填 NAS 的 IP(例如 192.168.1.100)
  5. Forward Port:8888
  6. 點 Save

儲存後,所有打到 vault.yourdomain.com 的流量就會被轉發到 Vaultwarden。


🔒 設定 HTTPS

NPM 可以自動向 Let's Encrypt 申請免費 SSL 憑證:

  1. 編輯剛才建立的代理主機
  2. 切換到 SSL 分頁
  3. SSL Certificate 選擇 Request a new SSL Certificate
  4. 勾選 Force SSL(強制 HTTP 轉到 HTTPS)
  5. 填入你的 Email(Let's Encrypt 通知用)
  6. 點 Save

NPM 會自動向 Let's Encrypt 申請憑證,通常幾秒內完成。憑證快到期時也會自動續約。

申請憑證需要 Let's Encrypt 能從外部驗證你對該網域的所有權(Port 80 必須對外開放),或使用 DNS 驗證。若使用 Cloudflare 管理 DNS,可以用 DNS Challenge 不需要開 Port。


🔧 搭配 Cloudflare DNS

如果你的網域在 Cloudflare,推薦這個設定:

  1. 在 Cloudflare DNS 新增 A 記錄,指向你的家裡 IP
  2. 把 Proxy 狀態設為 DNS only(灰色雲朵),讓 Let's Encrypt 驗證通過
  3. 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 保護和自動憑證申請,讓整個架構更完整。


🔗 延伸閱讀

這篇有幫助嗎? 一個圖形介面,管理所有自架服務的網域和 HTTPS。
—