Nginx Proxy Manager + Zerotier: 反向代理和SSL自動化方案

之前寫過一篇用 frp + docker 佈署 reverse proxy 和 SSL 認證的教學,雖然功能完整,但設定細節不少,尤其 frp 內網穿透的環境變數設定頗複雜。

docker瞬間佈署reverse_proxy還有ssl認證

發現用 Vultr VPS + Zerotier + Nginx Proxy Manager,其實可以更簡單地達成同樣目的,這篇就來分享我的新做法。

Vultr VPS 規格與費用

這次選用 Vultr,規格如下:

  • 1 核心 CPU
  • 1GB RAM
  • 25GB SSD
  • 自動備份

每月只要約 $6,比之前用 GCP 或 AWS 同規格 VPS 便宜一半,CP 值很高,適合自架小型服務。

架構流程示意圖

flowchart TD Client[外部用戶端] --> VPS[Vultr VPS: Nginx Proxy Manager] VPS --> Zerotier[Zerotier 虛擬網路] Zerotier --> LocalServer[本地伺服器] LocalServer --> Service[Web或API服務]
  • 外部用戶端透過網域請求 VPS
  • VPS 上的 Nginx Proxy Manager 負責反向代理
  • VPS 與本地伺服器透過 Zerotier 虛擬網路安全連線
  • 本地伺服器提供實際服務

實作步驟

1. Vultr VPS 建置與 Docker 安裝

Vultr 開機後,確保系統已安裝 Docker 與 docker-compose。

2. 部署 Nginx Proxy Manager

建立 docker-compose.yml:

yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
version: '3'
services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

啟動:

bash
1
docker-compose up -d

3. 安裝 Zerotier 並串連本地伺服器

VPS 和本地伺服器都安裝 Zerotier:

bash
1
2
curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli join <你的網路ID>

Zerotier 控制台允許兩台主機互通,取得本地伺服器的 Zerotier IP。

4. Nginx Proxy Manager 設定反向代理

  • 在 Proxy Hosts → Add Proxy Host,輸入對外的網域名稱。
  • Forward Hostname / IP 填 Zerotier 分配給本地伺服器的虛擬 IP,Forward Port 填服務埠號(例如 80 或 443)。
  • 切到 SSL 分頁,勾選 Request a new SSL Certificate,填入管理信箱並接受 Let’s Encrypt 條款;核發成功後,憑證之後會自動續約。
  • 確認其他進階選項依需求調整後,點 Save 套用設定。

優勢比較

  • 設定流程比 frp 方案簡單,幾乎不用煩惱環境變數
  • Zerotier 虛擬網路安全穩定,適合異地串連
  • Vultr VPS 價格實惠,備份方便
  • Nginx Proxy Manager 介面友善,SSL 自動化

心得

雖然Nginx Proxy Manager只有UI設定反向代理,但是設定上變得超級簡單
每次新增一個服務只需要在自己的網域商DNS設定domain和Nginx Proxy Manager新增proxy host就好了