Nginx Proxy Manager 評測:圖形化介面輕鬆搞定反向代理與 SSL 證書

computer%20screen%20showing%20data%20visualization...
發表時間:2026 年 09 月 24 日 | 更新日期:2026 年 09 月 24 日 | 編輯:雅寶社區編輯團隊
Nginx Proxy Manager 評測:圖形化介面輕鬆搞定反向代理與 SSL 證書 - 雅寶社區 · 頂客論壇

NPM 是開源專案,採用 MIT 授權,原始碼公開在 GitHub 上。它本質上是一個「包裝層」,把幾個成熟元件整合在一起:

Nginx:真正負責處理流量與 TLS 終結的網頁伺服器。

  • Node.js 後端:處理 REST API、資料庫操作、產生 Nginx 設定檔、呼叫 Certbot。
  • Vue.js 前端:提供你看到的圖形化操作介面。

  • 資料庫:預設使用 SQLite(輕量、零設定),也可改用 MySQL/MariaDB,適合多節點或高頻寫入的環境。
  • Certbot 與 acme.sh 相關機制:負責向 Let's Encrypt 申請與續期憑證。
  • 部署方式以 Docker 為主,官方映像檔是 jc21/nginx-proxy-manager。專案也提供社群維護的其他安裝方式,但社群共識是:除非你有特殊理由,否則一律用 Docker。原因很簡單,NPM 牽涉到 Nginx、Node、憑證工具等多個元件的版本搭配,手動安裝很容易在某個環節卡住,而 Docker 把這些相依性全部封裝好了。

    2.2 主要功能一覽

    下表整理了 NPM 的主要功能與實際用途,方便你快速判斷是否符合需求:

    功能

    說明

    實用程度

    Proxy Host

    最基本的反向代理,把網域導向內部 IP 與連接埠

    ★★★★★

    SSL 憑證管理

    一鍵申請 Let's Encrypt 憑證、自動續期、強制 HTTPS 跳轉

    ★★★★★

    Redirection Host

    將整個網域 301/302 轉到另一個網址

    ★★★★☆

    Stream(TCP/UDP)

    轉發非 HTTP 協定,例如資料庫、遊戲伺服器、SMTP

    ★★★★☆

    Access Lists

    以帳密做 HTTP Basic Auth,或限制來源 IP

    ★★★★☆

    404 Host

    自訂找不到主機時回傳的頁面

    ★★☆☆☆

    自訂 Nginx 設定片段

    在自動生成的設定中插入手寫指令

    ★★★★☆

    使用者與權限管理

    可建立多個管理帳號

    ★★★☆☆

    稽核日誌

    記錄誰在什麼時候改了哪筆設定

    ★★★☆☆

    2.3 它不適合處理什麼?

    為了避免期待落差,這裡也要誠實說明 NPM 的邊界。它不是一個完整的 Nginx 管理面板,你不能透過它調整 worker_processes、設定複雜的 rewrite 規則鏈、操作 upstream 負載平衡的健康檢查,或是做精細的快取策略。它的定位是「反向代理與憑證的前台」,複雜邏輯仍然要靠自訂設定片段硬寫。

    另外,NPM 也不是 WAF(Web 應用防火牆),它不會幫你擋 SQL Injection 或 XSS。若你需要這些,得另外串接 ModSecurity、Cloudflare 或專門的防護服務。

    三、安裝與部署實測

    3.1 用 Docker Compose 部署,五分鐘搞定

    實測環境為一台 2 vCPU/2GB RAM 的雲端主機,系統為 Ubuntu 22.04,已預先安裝 Docker 與 Docker Compose。以下是官方推薦的部署方式:

    version: "3.8"

    services:

    app:

    image: 'jc21/nginx-proxy-manager:latest'

    restart: unless-stopped

    ports:

    • '80:80' # HTTP
    • '443:443' # HTTPS
    • '81:81' # 管理介面

    environment:

    DB_SQLITE_FILE: "/data/database.sqlite"

    DISABLE_IPV6: 'true'

    volumes:

    • ./data:/data
    • ./letsencrypt:/etc/letsencrypt

    存成 docker-compose.yml 後執行 docker compose up -d,等個十幾秒,開啟瀏覽器連到 http://主機IP:81 就能看到登入畫面。整個過程不需要編譯、不需要設定資料庫、不需要碰任何設定檔。

    有幾個部署細節值得注意。第一,80 與 443 埠必須是空的。如果你的主機上已經跑著 Apache、Caddy 或另一個 Nginx,請先停掉它,否則容器會啟動失敗。第二,data 與 letsencrypt 這兩個目錄一定要掛載出來,否則容器重建時設定與憑證都會消失。第三,若你使用 MySQL,記得把 DB_MYSQL_HOST、DB_MYSQL_USER 等環境變數補上,並將資料庫容器放在同一個 Docker 網路中。

    3.2 首次登入與安全初始化

    預設帳號是 [email protected],密碼是 changeme。登入後系統會立刻要求你修改姓名、Email 與密碼,這個流程設計得不錯,避免了「忘了改預設密碼」的低級錯誤。

    不過這裡有一個非常重要的資安提醒:預設狀態下,管理介面 81 埠是對外開放的。請務必在雲端防火牆或主機防火牆上限制 81 埠的來源 IP,或者更進一步,把 81 埠只綁定到內網位址,再透過 VPN 或 SSH 通道存取。我實測時就刻意掃了一下,還沒改防火牆設定的 NPM 實例幾乎都會在短時間內收到登入嘗試。這是很多教學文章忽略的一點。

    3.3 非 Docker 安裝值得嘗試嗎?

    專案本身有提供從原始碼建置的方式,需要手動安裝 Node.js、Nginx、Python 環境、Certbot 等相依項目。實測結論是:不推薦。原因有三:版本相依容易出錯;日後升級需要重新跑一次建置流程;一旦遇到問題,社群幾乎都以 Docker 環境為前提在回答。除非你的環境完全不允許 Docker,否則沒有必要走這條路。

    四、圖形化介面操作流程實測

    4.1 Proxy Host:新增第一個反向代理

    點進「Hosts → Proxy Hosts → Add Proxy Host」,會看到一個分頁式的表單。實際填寫的欄位如下:

  • Domain Names:填入你要使用的網域,例如 app.example.com。可以一次填多個,用逗號分隔。
  • Scheme:後端服務是 HTTP 還是 HTTPS。多數自架服務是 HTTP,選 http 即可。
  • Forward Hostname / IP:後端位址。若後端也是 Docker 容器,填容器名稱(同一個 Docker 網路內可直接解析)。
  • Forward Port:後端連接埠,例如 Jellyfin 的 8096、Nextcloud 的 80。
  • Cache Assets:是否啟用靜態資源快取。

  • Block Common Exploits:啟用一組基本的攻擊樣式阻擋規則,建議勾選。
  • Websockets Support:若後端需要 WebSocket(例如多數的線上工具、聊天服務),一定要勾選。
  • 儲存後,NPM 會即時生成設定、測試並 reload。整個過程大約一到兩秒,重新整理頁面就能看到新增的項目。我實測新增十筆規則,從頭到尾沒碰過終端機,這正是 NPM 的最大賣點。

    值得一提的是,NPM 對 Docker 環境特別友善。如果 NPM 與後端容器在同一個 Docker 網路裡,Forward Hostname 直接填容器名稱就好,不需要知道實際 IP,容器重啟換 IP 也不影響。建議在 compose 檔案中建立一個共用網路,把所有服務接上去。

    4.2 SSL 憑證:從申請到自動續期

    在同一筆 Proxy Host 的「SSL」分頁中,選擇「Request a new SSL Certificate」,勾選「Force SSL」與「HTTP/2 Support」,同意服務條款後按下儲存。NPM 會在背景呼叫 ACME 流程,向 Let's Encrypt 驗證網域所有權,通常十秒內完成。

    驗證成功後,憑證會存放在掛載出來的 letsencrypt 目錄中,並由容器內的排程自動續期。實測追蹤了三個月的續期紀錄,沒有出現任何需要人工介入的情況,這點比起手動維護 Certbot 確實省心不少。

    但這裡有幾個常見的失敗原因,值得先知道:

  • DNS 尚未生效:網域必須先解析到這台主機的 IP,否則 HTTP-01 驗證拿不到回應。
  • 80 埠被佔用或封鎖:Let's Encrypt 的 HTTP-01 驗證必須經由 80 埠。若你的 ISP 封鎖 80 埠(部分家用網路會),就得改用 DNS 驗證。
  • Cloudflare 代理未關閉:若網域掛在 Cloudflare 後面並開啟了橙色雲朵代理,驗證過程中可能被阻擋。建議首次申請時先設為 DNS Only,成功後再開啟代理。
  • 重複申請頻率限制:Let's Encrypt 有每週同網域的重複申請限制,測試時不要太頻繁刪除重建。
  • 4.3 Access Lists:替服務加上第二道門

    有些服務(例如管理後台、內部監控、個人筆記工具)你不希望被任何人找到就能打開。NPM 的 Access Lists 提供了兩種控制方式:

    第一種是 HTTP Basic Auth,建立使用者名稱與密碼(密碼以 bcrypt 雜湊儲存),然後在 Proxy Host 設定中指定這份清單。這樣一來,任何人連進來都會先看到瀏覽器原生的帳密輸入框。這對機器人與隨機掃描相當有效,但要注意它只是基本防護,密碼強度仍然重要。

    第二種是 IP 白名單/黑名單,可用 CIDR 格式指定允許或拒絕的來源網段。實務上很適合「只允許公司固定 IP 存取」或「只允許自家 ISP 網段進來」的情境。兩者可以同時套用,形成雙重檢查。

    實測下來,Access Lists 的設定直覺、生效迅速,是 NPM 被低估的功能之一。很多人只把它當反向代理用,其實這道防線的成本效益很高。

    4.4 Stream 與 Redirection Host

    Stream 分頁處理的是非 HTTP 流量。例如你的 MySQL 跑在內網的 3306,想從外部連線;或是自架的 Minecraft 伺服器需要 25565 埠。只要新增一筆 Stream 規則,指定流入埠與目標位址,NPM 就會用 Nginx 的 stream 模組轉發。

    要注意的是,Stream 不支援 SSL 憑證申請(因為它不屬於 HTTP 協定),也無法套用 Access Lists。若需要加密,得在客戶端與後端自行處理 TLS。

    Redirection Host 則是把整個網域轉向另一個網址,例如把 old.example.com 永久轉到 new.example.com。雖然用 DNS 的 CNAME 也能做到類似效果,但 301 轉址對於 SEO 的權重轉移更明確,且可以精細控制路徑。

    五、進階應用與實用技巧

    5.1 自訂 Nginx 設定片段

    圖形化介面方便,但總會遇到介面沒提供的需求。NPM 在 Proxy Host 的「Advanced」分頁中提供了自訂設定欄位,你可以在這裡插入任意的 Nginx 指令。常見用途包括:

    放寬上傳大小限制。Nginx 預設的 client_max_body_size 是 1MB,對於 Nextcloud、Immich 這類服務來說太小,會導致大檔案上傳失敗。這時插入 client_max_body_size 0; 即可取消限制。

    調整逾時設定。某些處理時間較長的應用(例如大型報表匯出、AI 推論服務)會遇到 504 Gateway Timeout,可以加入 proxy_read_timeout 600s; 之類的指令延長等待。

    加入自訂標頭。例如要整合 Google OAuth 或某些需要特定驗證標頭的服務時,可用 add_header 或 proxy_set_header 補上。

    要注意的是,這裡的內容會被插入到自動生成的設定中,若你寫了衝突的指令,可能導致 Nginx 語法錯誤而 reload 失敗。NPM 在儲存前會做語法測試,不會讓整個服務掛掉,但你會看到錯誤提示。建議每次只改一小段,確認生效後再繼續。

    5.2 用 DNS 驗證申請泛域名憑證

    若你有一堆子網域(app.example.com、git.example.com、nas.example.com……),一張泛域名憑證 *.example.com 就能全部涵蓋,管理上清爽許多。泛域名憑證只能透過 DNS 驗證申請,而 NPM 支援多家 DNS 供應商的 API,包括 Cloudflare、Route 53、DigitalOcean、GoDaddy 等。

    以 Cloudflare 為例,步驟是:到 Cloudflare 建立一組具備 Zone:DNS:Edit 權限的 API Token,回到 NPM 的「SSL Certificates → Add SSL Certificate → Let's Encrypt」,在 Domain Names 填入 *.example.com 與 example.com,勾選「Use a DNS Challenge」,選擇 Cloudflare,貼上 Token,儲存即可。NPM 會自動建立 TXT 記錄、完成驗證、再清除記錄,整個流程不需要你手動介入。

    實測這個流程相當順暢,特別適合手上管理多個子網域的人。唯一的注意點是 API Token 的權限要最小化,不要直接使用 Global API Key。

    5.3 搭配 Cloudflare 與真實 IP 還原

    很多人會在 NPM 前面再掛一層 Cloudflare,好處是隱藏真實 IP、提供 CDN 加速與基本 DDoS 防護。但這會帶來一個副作用:NPM 的日誌裡看到的來源 IP 全是 Cloudflare 的節點 IP,導致 Access Lists 的 IP 規則失效,也無法從日誌判斷真實訪客。

    解法是在自訂設定中加入 Cloudflare 的真實 IP 還原設定。由於 Cloudflare 的 IP 段會變動,比較穩妥的做法是定期更新清單,或使用社群維護的設定片段。設定完成後,日誌與 IP 規則就能正確識別原始來源。這個議題稍嫌繁瑣,但只要設定一次就能長期受益。

    5.4 備份與遷移

    NPM 的所有設定都存在資料庫裡,因此備份的核心就是備份資料庫檔案與憑證目錄。若使用 SQLite,只要定期複製 data/database.sqlite 與整個 letsencrypt 目錄即可。NPM 介面也提供了設定匯出功能,可以產生一份 JSON 備份,方便在另一台主機上快速還原。

    實際遷移測試中,我在新主機部署好容器後,把備份的資料庫與憑證目錄覆蓋進去,重啟容器,所有 Proxy Host、憑證、使用者設定都完好如初,總共花不到十分鐘。這種「整包搬走」的特性,對於經常更換 VPS 或做災難復原的人來說非常實用。

    六、效能、穩定性與安全性評測

    6.1 效能表現

    由於底層就是 Nginx,NPM 的效能基本上等於原生 Nginx,圖形化介面與資料庫只影響「設定變更」的流程,不影響實際的流量處理路徑。實測在一台 2 vCPU 的主機上,透過 NPM 代理的靜態網站可以輕鬆跑滿 1Gbps 網卡,並行處理數千個連線也沒有明顯延遲。

    唯一會感覺到的差異是設定變更時的處理時間。每次新增或修改規則,後端都要寫入資料庫、重新產生設定檔、測試語法、reload Nginx。在 SQLite 環境下,這個流程大約一到兩秒,完全可接受。但如果你有數百筆規則且頻繁變更,改用 MySQL 會讓介面反應更順暢一些。

    6.2 安全性考量

    NPM 本身沒有重大災難級漏洞,但它的設計有幾個需要使用者自行注意的資安要點:

  • 管理介面必須妥善保護。81 埠若能從公網存取,就等於把控制權暴露在掃描器面前。務必用防火牆限制來源。
  • 預設憑證目錄的權限。私鑰檔案若被其他容器或使用者讀取,等於失去加密意義。確保掛載目錄權限收緊。
  • 容器本身的更新。NPM 映像檔需要定期拉新版,否則內含的 Nginx 或相依套件可能帶有已知漏洞。建議搭配 Watchtower 或手動排程更新。
  • 搭配 Access Lists 分層防護。不要把所有服務都裸露在公網,能加驗證的就加。
  • 另外要提醒的是,NPM 的設計讓它成為網路的「單點入口」,一旦它掛掉,所有對外服務都會中斷。因此若你的服務有高可用需求,需要考慮多節點部署或改用其他架構。

    6.3 穩定性與維護狀態

    在長達數個月的實測期間,NPM 沒有出現過崩潰或需要重啟的情況。容器重啟後設定自動載入,憑證自動續期,整體來說相當穩定。

    不過社群長期關注的一個議題是開發活躍度。這個專案在過去曾出現較長時間沒有新版本發布的情況,引起不少討論。就開源專案而言,維護節奏放緩確實是需要納入考量的風險,尤其當底層的 Nginx、Node.js 出現安全性更新時。實務建議是:把它當作一個「成熟但更新較慢」的工具使用,定期關注專案動態,並保留手動切換到原生 Nginx 或 Caddy 的能力。

    七、與同類工具比較

    反向代理的解決方案不只 NPM 一個,以下是幾個常見選項的橫向比較:

    工具

    操作方式

    自動 SSL

    學習曲線

    彈性

    適合對象

    Nginx Proxy Manager

    圖形化介面

    支援(含泛域名)

    自架新手、Home Lab

    原生 Nginx + Certbot

    設定檔

    需自行設定

    極高

    有經驗的維運人員

    Caddy

    設定檔(極簡)

    內建自動

    喜歡簡潔設定的人

    Traefik

    標籤/設定檔

    內建自動

    極高

    Kubernetes、大型容器環境

    SWAG

    設定檔+範本

    內建自動

    中高

    願意碰設定檔的自架玩家

    簡單來說,如果你追求的是「最快讓服務上線」且不想學設定檔語法,NPM 是首選。Caddy 的設定語法已經非常精簡,但終究要編輯檔案;Traefik 功能強大但設定抽象,對新手不友善;原生 Nginx 彈性最高,但也是門檻最高的選項。

    值得注意的是,NPM 的彈性其實不差——透過自訂設定片段,你能做到的事情比想像中多。真正受限的是「無法改變整體架構」這件事,例如複雜的負載平衡策略、動態 upstream 更新等。

    八、優點與缺點總結

    8.1 主要優點

  • 學習成本極低:不需要懂 Nginx 語法,也能在十分鐘內架好一個帶 HTTPS 的反向代理。
  • SSL 憑證全自動:申請、續期、強制跳轉一氣呵成,還支援 DNS 驗證的泛域名憑證。
  • 與 Docker 整合良好:可直接用容器名稱作為後端位址,免除 IP 變動的困擾。
  • 狀態一目瞭然:所有代理規則、憑證效期、存取清單都在同一個介面中。

  • 附帶實用功能:Access Lists、Stream 轉發、Redirection Host、稽核日誌一應俱全。
  • 備份與遷移簡單:複製資料庫與憑證目錄即可整包搬移。

    8.2 主要缺點

    開發活躍度不如預期:版本更新節奏偏慢,長期維護性需要觀察。

    管理介面本身是攻擊面:若未妥善保護 81 埠,風險相當高。

  • 彈性有上限:複雜的 Nginx 邏輯仍需靠自訂片段硬寫,且無法管理上游負載平衡。
  • 單點故障:作為唯一入口,服務中斷時影響面很大。

    Stream 功能相對陽春:不支援憑證與存取控制。

    非 Docker 安裝體驗不佳,幾乎等於被綁定在容器環境。

    8.3 誰適合用 Nginx Proxy Manager?

    非常適合:自架 Home Lab 的玩家、把多個服務放在單台 VPS 的個人開發者、小型團隊需要快速讓內部工具上線、對 Nginx 設定檔不熟的初學者。

    不太適合:需要複雜流量調度的大型生產環境、必須嚴格遵循更新時程的合規場景、需要精細快取與 WAF 功能的高流量網站。這些情境下,原生 Nginx、Traefik 或搭配專業 CDN 會更合適。

    九、常見問題 FAQ

    Q1:NPM 可以跟其他網頁伺服器共存嗎?

    可以,但需要調整連接埠或改用其他模式。由於 NPM 需要獨佔 80 與 443,若主機上已有 Apache 或 IIS,必須先讓它們改用其他埠,或把 NPM 部署到另一台主機。

    Q2:憑證續期失敗怎麼辦?

    先檢查網域的 DNS 是否仍指向正確 IP、80 埠是否暢通、Cloudflare 代理是否造成干擾。若狀況持續,可以到 SSL Certificates 頁面手動觸發續期,並查看日誌中的 ACME 錯誤訊息。

    Q3:可以代理 WebSocket 服務嗎?

    可以,只要在 Proxy Host 設定中勾選「Websockets Support」即可。多數需要即時通訊的服務(如 Nextcloud Talk、各種聊天工具)都必須開啟這個選項。

    Q4:如何處理 502 Bad Gateway?

    這通常代表 NPM 連不到後端。請確認 Forward Hostname 與 Port 是否正確、後端服務是否正在執行、兩者是否在同一個 Docker 網路中。若後端是 HTTPS 但 Scheme 選了 http,也會出現這個錯誤。

    Q5:SQLite 與 MySQL 該選哪個?

    一般自用環境選 SQLite 就好,零維護、效能足夠。只有在規則數量龐大、多人同時操作,或需要與其他系統共用資料庫時,才建議改用 MySQL。

    Q6:更新 NPM 會不會遺失設定?

    只要 data 與 letsencrypt 目錄有正確掛載,拉新映像檔重建容器後設定都會保留。更新前仍建議先備份一次資料庫。

    十、結論與評分

    Nginx Proxy Manager 解決的是一個非常具體、也非常普遍的問題:讓不懂 Nginx 的人也能安全地把服務推出家門。它把反向代理與 SSL 憑證這兩個最容易勸退新手的環節,壓縮成幾個表單欄位與幾次點擊。以我實測的體驗來說,從部署到第一個 HTTPS 網域上線,全程不到十分鐘,而且完全沒有打開終端機。

    它的缺點也很清楚:開發節奏偏慢、管理介面需要自行加固、彈性有天花板。但這些缺點並不會讓它變得不值得用,而是提醒你——它是「簡化層」,不是「全能層」。你可以在它之上疊加 Cloudflare、在自訂片段裡補足特殊需求,也可以在未來規模變大時平順地遷移到原生 Nginx,因為底層的設定邏輯是共通的。

    綜合評分如下(滿分 5 分):

    易用性:★★★★★

    功能性:★★★★☆

    效能:★★★★★

    彈性:★★★☆☆

    安全性(預設狀態):★★☆☆☆(妥善設定後可達 ★★★★☆)

    維護活躍度:★★★☆☆

    整體推薦度:★★★★☆

    如果你手上有一堆自架服務,卻一直卡在「怎麼讓它們安全上線」這一步,Nginx Proxy Manager 幾乎是目前門檻最低、回報最高的選擇。花一個晚上把它架起來,你會發現原本繁瑣的反向代理與憑證管理工作,真的可以變得輕鬆愉快。只要記得一件事:把 81 埠關好,它就是你最好的幫手;忘記關,它就可能變成你的惡夢。

    🏠 返回首頁