2026 年 Nginx Proxy Manager 教學:輕鬆管理反向代理與 SSL

modern%20workspace%20with%20laptop%2C%20smartphone...
發表時間:2026 年 09 月 20 日 | 更新日期:2026 年 09 月 20 日 | 編輯:雅寶社區編輯團隊
2026 年 Nginx Proxy Manager 教學:輕鬆管理反向代理與 SSL - 雅寶社區 · 頂客論壇

既然 Nginx 本身就能做反向代理,為什麼還需要 NPM?原因在於「管理成本」。當你只有一兩個服務時,手寫設定檔當然沒問題;但當服務數量來到十個、二十個,問題就會逐一浮現:

  • 每新增一個服務,就要新增一份 server 區塊,還要記得建立對應的 sites-available 與 sites-enabled 連結。
  • Certbot 的憑證續期要靠 cron job,一但因為 DNS 設定變更而失敗,你得自己去翻 log 找原因。
  • HTTP 轉 HTTPS 的跳轉、HSTS 標頭、OCSP Stapling 這些最佳實踐,每次都要複製貼上,容易漏掉。
  • 設定檔一多,想找出是哪個服務造成 502 錯誤,得一個一個 grep。

    團隊成員若不懂 Nginx 語法,完全無法協助維護。

    NPM 把上述流程全部圖形化。你只要在介面上填寫「來源網域」、「目標 IP 與埠號」,剩下的設定檔產生、驗證、重載,通通由它幫你處理。對於自架愛好者與小型團隊來說,這個效率提升非常明顯。

    2026 年的版本演進與適用族群

    NPM 專案從 2017 年發展至今,已經迭代相當多版本。近幾年的更新重點放在資料庫架構調整、更嚴謹的憑證管理流程、更完整的 API 支援,以及對新版本 Nginx 核心的跟進。截至 2026 年,官方 Docker 映像檔依然是最推薦的部署方式,安裝與升級都相當單純。

    它特別適合以下幾種人:

    在家用 NAS 或迷你主機上架設多個服務的自架玩家。

    需要快速為內部系統加上 HTTPS 的中小企業 IT 人員。

    想學習反向代理概念,但不想一開始就掉進設定檔地獄的初學者。

    需要透過 API 自動化管理代理規則的開發者。

    Nginx Proxy Manager 核心功能總覽

    在動手安裝之前,先快速瀏覽一下 NPM 提供的主要功能,這樣你在後續設定時會更清楚每個選項的用途。

    視覺化網頁介面與多使用者管理

    NPM 最大的賣點就是那套直覺的網頁控制台。左側選單把所有功能分類清楚:Proxy Hosts(反向代理主機)、Redirection Hosts(重新導向)、Streams(TCP/UDP 轉發)、Access Lists(存取清單)、SSL Certificates(憑證管理)、Users(使用者)。

    它支援多使用者帳號,並且可以針對每個使用者設定權限。管理員能建立完整權限的帳號給自己,同時開設只能檢視或管理特定主機的帳號給同事,這在團隊協作時相當方便。

    一鍵申請 Let's Encrypt SSL 憑證

    SSL 憑證的申請與續期是 NPM 最受歡迎的功能。你只要在建立 Proxy Host 時勾選「Request a new SSL Certificate」,系統就會自動透過 HTTP-01 或 DNS-01 挑戰向 Let's Encrypt 申請憑證,並且在到期前自動續期。

    它也支援匯入自訂憑證,例如你從商業 CA 購買的萬用字元憑證,或是內部自簽憑證。對於使用 Cloudflare、Route53 等 DNS 服務的玩家,NPM 內建 DNS 挑戰支援,可以申請萬用字元憑證(*.example.com),這對於服務數量多、又不想逐一開放驗證路徑的情況非常實用。

    存取清單與身分驗證機制

    Access Lists 功能讓你可以在反向代理這一層加上額外的保護。你可以設定:

  • IP 白名單或黑名單:只允許特定網段連線,例如限制只有公司 IP 能存取內部管理介面。
  • HTTP Basic Auth:要求輸入帳號密碼才能通過,適合用來保護尚未建置登入機制的服務。
  • 兩者並用:先過濾 IP,再要求密碼,形成多層防護。

    這裡要特別提醒:Basic Auth 走的是明文驗證,一定要搭配 HTTPS 使用,否則密碼會在傳輸過程中被攔截。

    Stream 流量轉發:支援非 HTTP 協定

    除了 HTTP/HTTPS,NPM 也支援 TCP 與 UDP 的流量轉發(Stream)。這代表你可以用它來代理 SSH、MySQL、RDP、遊戲伺服器等非 HTTP 服務。設定方式與 Proxy Host 類似,只要指定來源埠號與目標位址即可。

    不過要注意,Stream 模式無法套用 HTTP 層級的 SSL 憑證管理,憑證必須在後端服務自己處理,或是使用 SNI 分流的方式來設定。

    安裝環境準備與 Docker 部署實戰

    接下來進入實作階段。NPM 官方最推薦的安裝方式是 Docker,以下步驟適用於 Ubuntu、Debian、樹莓派,以及各大 NAS 系統。

    系統需求與前置條件

    在開始之前,請先確認以下條件都已經滿足:

  • 一台可長期運作的伺服器:可以是 VPS、實體主機、NAS,建議至少 1 GB 記憶體與 10 GB 儲存空間。
  • Docker 與 Docker Compose:建議 Docker Engine 24 以上版本,Compose 使用 v2 語法。
  • 一個網域:用來指向你的伺服器,並且具備 DNS 管理權限。

  • 對外網路:80 與 443 埠需要能從網際網路連入(若只做內網使用則不強制)。
  • 固定的內網 IP:伺服器本身建議設定靜態 IP,避免重開機後位址變動。
  • 另外,請確認 80/443/81 這三個埠目前沒有被其他服務佔用。你可以用以下指令檢查:

    sudo ss -tlnp | grep -E ':(80|443|81)\s'

    如果發現已經有 Apache 或系統版 Nginx 在跑,建議先停用它們,避免衝突。

    使用 Docker Compose 部署 NPM

    首先建立一個專屬目錄,並在其中建立 docker-compose.yml:

    mkdir -p /opt/npm && cd /opt/npm

    nano docker-compose.yml

    接著貼入以下內容:

    services:

    app:

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

    container_name: nginx-proxy-manager

    restart: unless-stopped

    ports:

    • '80:80'
    • '443:443'
    • '81:81'

    environment:

    DISABLE_IPV6: 'true'

    TZ: 'Asia/Taipei'

    volumes:

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

    healthcheck:

    test: ["CMD", "/usr/bin/check-health"]

    interval: 30s

    timeout: 10s

    retries: 3

    這裡有幾個重點說明:

  • ports 中的 80 與 443 是給外部服務使用的,81 則是 NPM 自己的管理介面。
  • volumes 把資料與憑證掛載到本機,確保容器重建後設定不會消失。這一步非常重要,千萬不要省略。
  • TZ 設定時區,讓 log 時間與你所在位置一致,除錯時會方便很多。

    若你使用 SELinux 的系統(如部分 RHEL 系),可能需要調整掛載選項。

    存檔後啟動容器:

    docker compose up -d

    docker compose logs -f

    看到類似「Backend PID 1 listening on port 3000」的訊息,就代表啟動成功了。若你使用防火牆,記得開放對應埠號:

    sudo ufw allow 80/tcp

    sudo ufw allow 443/tcp

    sudo ufw allow 81/tcp

    首次登入與初始化設定

    打開瀏覽器,輸入 http://你的伺服器IP:81,就會看到 NPM 的登入畫面。預設帳號密碼是:

    Email:[email protected]

    Password:changeme

    首次登入後,系統會強制要求你修改成自己的 Email 與密碼。請務必使用高強度密碼,因為這個介面一旦被取得,等於整個反向代理的設定都門戶洞開。

    登入後建議先做幾件事:

    到 Users 頁面確認管理員帳號資訊正確。

  • 到 Settings 頁面檢查預設的 Let's Encrypt 聯絡信箱是否已自動帶入。
  • 如果你打算用 DNS 挑戰申請憑證,可以在 Settings → DNS Providers 中預先確認你的服務商是否在支援清單內。
  • 考慮把管理介面的 81 埠改成其他埠號,或限制只允許內網存取,降低被暴力破解的風險。

    實戰:建立你的第一個反向代理主機

    環境準備完成後,我們來實際建立一個反向代理。假設你想把 blog.example.com 指向內網一台跑在 192.168.1.100:8080 的部落格服務。

    先設定好 DNS 記錄

    在新增 Proxy Host 之前,請先到你的網域註冊商或 DNS 服務商(Cloudflare、Route53、Google Domains 等)新增一筆 A 記錄:

    名稱:blog

    類型:A

    值:你伺服器的公開 IP

    TTL:預設即可

    設定完成後,可以用以下指令確認解析是否生效:

    dig blog.example.com +short

    nslookup blog.example.com

    如果你使用 Cloudflare,記得先把該筆記錄的代理狀態(橘色雲朵)關掉,改用 DNS only(灰色雲朵),直到憑證申請完成為止。這是因為 Let's Encrypt 的 HTTP-01 驗證需要直接連到你的伺服器,中間隔一層 CDN 有時會造成驗證失敗。憑證搞定後再開回去即可。

    新增 Proxy Host 的完整步驟

    回到 NPM 介面,點選左側的 Hosts → Proxy Hosts,然後點右上角的 Add Proxy Host。你會看到一個包含三個分頁的視窗:Details、Custom Locations、Advanced。

    在 Details 分頁中填入以下資訊:

  • Domain Names:輸入 blog.example.com。這裡可以一次填入多個網域,例如同時支援有無 www 的版本。
  • Scheme:選擇 http(因為後端服務沒有憑證)。若後端本身有 HTTPS,則選 https。
  • Forward Hostname / IP:填 192.168.1.100。若服務與 NPM 在同一台 Docker 主機上,也可以用容器名稱。
  • Forward Port:填 8080。

  • Cache Assets:視情況勾選。若後端是靜態網站,可以開啟快取;若是需要即時更新的應用,建議關閉。
  • Block Common Exploits:強烈建議勾選,會自動阻擋一些常見的掃描與攻擊路徑。
  • Websockets Support:如果你的應用使用 WebSocket(例如即時聊天、VNC、某些監控面板),務必勾選。
  • 填完後先不要急著按 Save,我們接著處理 SSL。

    申請 SSL 憑證並強制 HTTPS

    切換到 SSL 分頁,這裡是 NPM 最方便的地方:

  • SSL Certificate:選擇 Request a new SSL Certificate。
  • Force SSL:勾選,讓所有 HTTP 請求自動跳轉到 HTTPS。
  • HTTP/2 Support:勾選,提升傳輸效率。

  • HSTS Enabled:勾選,並設定 max-age 為 31536000。這會告訴瀏覽器在未來一年內都必須使用 HTTPS 連線。
  • HSTS Subdomains:如果你的所有子網域都已改用 HTTPS,可以勾選。
  • Email Address for Let's Encrypt:填入你的信箱,用來接收憑證到期通知。
  • I Agree to the Let's Encrypt Terms of Service:勾選。
  • 按下 Save 之後,NPM 會開始向 Let's Encrypt 申請憑證。整個過程通常在數十秒內完成。如果成功,你會看到該筆記錄的 SSL 欄位變成一把綠色鎖頭。

    此時打開瀏覽器連到 https://blog.example.com,應該就能看到你的服務,而且網址列顯示安全連線。憑證會在到期前 30 天內自動續期,完全不需要手動介入。

    進階設定技巧:讓 NPM 發揮完整實力

    基本的反向代理設定完成後,接下來介紹幾個實用進階技巧,這些能解決你未來八成以上的需求。

    自訂 Nginx 設定檔片段

    雖然 NPM 圖形介面涵蓋多數情境,但總有些特殊需求需要直接寫 Nginx 指令。在 Proxy Host 編輯頁的 Advanced 分頁中,有一個「Custom Nginx Configuration」欄位,你可以在此插入自訂設定。

    例如,要調高上傳檔案大小限制:

    client_max_body_size 0;

    要設定特定的回應標頭:

    add_header X-Frame-Options "SAMEORIGIN" always;

    add_header X-Content-Type-Options "nosniff" always;

    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    或是針對長連線的應用調整逾時時間:

    proxy_read_timeout 3600s;

    proxy_send_timeout 3600s;

    proxy_connect_timeout 60s;

    這些設定會直接插入該 Proxy Host 對應的 server 區塊中。修改完畢後按下 Save,NPM 會自動驗證語法並重載 Nginx,如果語法有錯會直接跳出錯誤訊息,不會讓整個服務掛掉,這點設計相當貼心。

    多個服務共用同一個網域

    有時候你希望一個網域底下掛多個服務,例如 example.com/app1 和 example.com/app2 分別指向不同的後端。這時可以使用 Custom Locations 分頁。

    操作步驟如下:

  • 先在 Details 分頁設定一個主要的 Forward Host,作為根路徑 / 的目標。
  • 切到 Custom Locations,點 Add Location。

    在 Location 欄位填入 /app1。

    設定該路徑對應的 Forward Hostname 與 Port。

    視需要加入自訂設定,例如重寫路徑的 rewrite 指令。

    要注意的是,並非所有應用都能順利在子路徑下運作。許多現代前端框架會使用絕對路徑載入資源,導致子路徑代理時出現 404。遇到這種情況,比較穩妥的做法還是替每個服務分配獨立的子網域。

    使用 Access List 保護內部服務

    假設你有一個管理介面,只想讓公司 IP 或自家固定 IP 存取。做法是:

  • 先到 Access Lists 頁面,點 Add Access List。
  • 命名為「內部限定」之類的名稱。

    在 Authorization 區塊設定一組帳號密碼(可選)。

  • 在 Access 區塊設定規則,例如 Allow 203.0.113.0/24,然後在最後加一條 Deny all。
  • 規則的順序很重要,NPM 會由上往下比對。設定完成後,回到 Proxy Host 編輯頁,在 Details 分頁的 Access List 下拉選單中選擇剛建立的清單即可。

    這樣一來,非白名單的 IP 連線會直接被拒絕,連服務的登入頁面都看不到,安全層級提升不少。

    WebSocket 與大檔案上傳調校

    如果你代理的是 Nextcloud、Jellyfin、Home Assistant 這類應用,通常會遇到兩個問題:一是 WebSocket 連線中斷,二是大檔案上傳失敗。

    前者只要在建立 Proxy Host 時勾選 Websockets Support 即可解決。後者則需要調整 Nginx 的 body size 限制,方法是在 Advanced 分頁加入:

    client_max_body_size 0;

    proxy_request_buffering off;

    client_max_body_size 0 代表不限制上傳大小,而 proxy_request_buffering off 則讓請求直接串流到後端,避免大檔案先被寫入暫存磁碟造成延遲。

    常見問題排解與疑難雜症

    再順利的設定也難免遇到狀況。以下整理幾個最常見的問題與解法。

    502 Bad Gateway 的排查順序

    502 是反向代理最常見的錯誤,代表 NPM 無法連到後端服務。排查順序建議如下:

  • 確認後端服務有在跑:在 NPM 主機上執行 curl -I http://192.168.1.100:8080,看看是否有回應。
  • 確認網路可達:用 ping 或 nc -zv 192.168.1.100 8080 測試連線。
  • 檢查 Docker 網路:如果後端也在 Docker 中,確認兩者是否在同一個 network,或是改用主機 IP 而非容器名稱。
  • 檢查防火牆:後端主機的防火牆可能擋掉了來自 NPM 的連線。

  • 查看 NPM log:執行 docker compose logs --tail=100,通常會看到具體的錯誤原因。
  • SSL 憑證申請失敗的常見原因

    Let's Encrypt 驗證失敗時,NPM 會顯示錯誤訊息。最常見的原因包括:

  • DNS 尚未生效:剛設定的 A 記錄可能還在傳播,建議等 10 到 30 分鐘再試。
  • 80 埠被佔用或未開放:HTTP-01 驗證需要透過 80 埠,確認防火牆與 ISP 都沒有阻擋。
  • Cloudflare 代理干擾:如前所述,申請期間先關閉橘色雲朵。

  • 網域申請次數超限:Let's Encrypt 對同一網域有每週 5 次的失敗上限,短時間內反覆嘗試會導致暫時被鎖。這時可以改用 DNS 挑戰繞過。
  • 多個 Proxy Host 搶同一個網域:確認沒有重複設定。

    憑證自動續期失敗怎麼辦

    NPM 會定期檢查憑證狀態並自動續期。如果發現續期一直失敗,可以先確認以下幾點:

  • 檢查 SSL Certificates 頁面,看該憑證的狀態與到期日。
  • 點進憑證詳情,查看最近一次的續期記錄與錯誤訊息。

    確認 letsencrypt 目錄的檔案權限正確,容器有寫入權限。

    若是 DNS 挑戰,確認 API Token 沒有過期或被撤銷。

    真的搞不定時,最乾脆的做法是把該筆憑證刪除,然後回到 Proxy Host 重新申請一次。NPM 的設計讓這個流程只需要幾分鐘。

    安全性強化與最佳實踐

    把服務暴露到網際網路上,安全永遠是第一優先。以下是幾項建議:

  • 變更管理介面埠號:81 埠是眾所皆知的位置,建議改成其他埠號,或透過防火牆限制只允許內網存取。
  • 啟用 HSTS:避免降級攻擊,但啟用前請確保所有子網域都已支援 HTTPS。
  • 定期更新映像檔:執行 docker compose pull && docker compose up -d,取得最新的安全性修補。
  • 最小權限原則:只開放必要的埠號,後端服務盡量不要直接暴露在外網。

  • 啟用 Fail2ban:可以搭配 NPM 的 log 設定規則,自動封鎖反覆嘗試登入的 IP。
  • 備份設定:定期備份整個 /opt/npm 目錄,包含資料庫與憑證。
  • 另外,NPM 本身提供的 Block Common Exploits 選項一定要開,它會阻擋許多自動化掃描工具試圖存取 /.env、/wp-config.php 之類的敏感檔案,成本極低但效果明顯。

    備份、還原與遷移

    NPM 的所有設定與資料都存放在掛載出來的 data 與 letsencrypt 目錄中,因此備份相當單純。只要把整個安裝目錄打包即可:

    tar -czvf npm-backup-$(date +%F).tar.gz /opt/npm

    要還原或遷移到新主機時,步驟如下:

    在新主機安裝 Docker 與 Docker Compose。

    把備份檔解壓到相同路徑。

    執行 docker compose up -d。

    確認所有 Proxy Host 與憑證都正常運作。

    由於憑證也一併備份,遷移後不需要重新申請,服務可以無縫接軌。建議把備份排程進 cron,例如每天凌晨自動打包並保留最近 30 份,避免手動忘記。

    2026 年的觀察與未來展望

    走過這幾年,NPM 在自架社群的定位越來越明確:它不是要取代專業的負載平衡器或 API Gateway,而是要成為「個人與小型團隊最容易上手的中介層」。2026 年的版本在幾個方向上有明顯進展:

  • API 完整性提升:更多操作可以透過 REST API 完成,方便與自動化流程整合,例如用 Terraform 或 Ansible 管理代理規則。
  • 憑證管理更智慧:對於多網域、萬用字元憑證的處理更加穩定,減少了過去常見的續期失敗案例。
  • 可觀測性改善:內建的健康檢查與更清楚的 log 格式,讓除錯效率提升。
  • 社群外掛生態:越來越多第三方工具支援 NPM,例如自動同步 Cloudflare DNS、整合監控系統等。
  • 當然,它也有其限制。如果你需要複雜的流量分流策略、A/B 測試、細緻的速率限制,或是需要服務網格等級的功能,那麼直接使用 Nginx 設定檔、Traefik 或 Caddy 可能會更適合。但對於「我只想讓十幾個服務好好掛上 HTTPS」這個需求來說,NPM 依然是性價比最高的選擇。

    結語:把時間留給真正重要的事

    自架服務的樂趣在於掌控與學習,但繁瑣的維運工作常常消磨掉這份熱情。Nginx Proxy Manager 的價值,就在於它把重複性高、容易出錯的設定工作自動化,讓你能把時間花在開發應用、研究新技術,而不是反覆編輯設定檔與搶救憑證。

    這篇文章從反向代理的概念談起,帶你完成 Docker 部署、初始化設定、建立第一個 Proxy Host、申請 SSL 憑證,一路講到進階調校與疑難排解。如果你跟著做了一遍,相信你現在已經有一套穩定運作的反向代理環境。

    接下來,不妨試著把手邊其他服務一個一個搬進來,體驗一下所有服務都有漂亮網域與綠色鎖頭鎖頭的成就感。記得定期更新映像檔、備份設定,並且隨時關注官方專案的更新公告。祝你自架順利,我們下次見。

    🏠 返回首頁