自動透過 Nginx Proxy Manager API 管理靜態網站託管,讓 Nginx 直接處理靜態檔案,效能更佳。
┌─────────────────────────────────────────┐
│ Nginx Proxy Manager (Docker) │
│ - 反向代理 + 靜態檔案服務 │
│ - 自動 SSL 憑證 │
└──────────────────┬──────────────────────┘
│
NPM API (Port 81)
│
┌──────────────────▼──────────────────────┐
│ Node.js (NPM Static Site Manager) │
│ - 監聽 www 目錄變化 │
│ - 自動更新 NPM 配置 │
└─────────────────────────────────────────┘
程式監聽 ./www 目錄
當目錄有變化時,掃描所有子目錄
比對 NPM 中的 Proxy Hosts
自動更新 advanced_config,讓 Nginx 直接服務靜態檔案
1. 啟動 Nginx Proxy Manager
開啟 http://localhost:81
使用預設帳號登入:
Email: admin@example.com
Password: changeme
修改密碼
mkdir -p www/example.com
echo " <h1>Hello World</h1>" > www/example.com/index.html
Domain Names: example.com
Forward Host: localhost
Forward Port: 80
# 直接執行
node index.js
# 或使用 PM2
pm2 start ecosystem.config.js
變數
說明
預設值
NPM_API_URL
NPM API 位址
http://localhost:81
NPM_USER
NPM 登入帳號
admin@example.com
NPM_PASSWORD
NPM 登入密碼
changeme
WWW_DIR
靜態檔案目錄
./www
module . exports = {
apps : [
{
name : "npm-static-manager" ,
script : "index.js" ,
env : {
NPM_API_URL : "http://localhost:81" ,
NPM_USER : "admin@example.com" ,
NPM_PASSWORD : "your-password" ,
WWW_DIR : "./www" ,
} ,
} ,
] ,
} ;
my-nginx/
├── index.js # 主程式
├── package.json # 專案配置
├── docker-compose.yml # Docker 編排
├── ecosystem.config.js # PM2 配置 (需自行建立)
├── data/ # NPM 資料 (自動產生)
├── letsencrypt/ # SSL 憑證 (自動產生)
└── www/ # 靜態網站目錄
├── site1.example.com/
│ └── index.html
└── site2.example.com/
└── index.html
需要 Node.js 18+ (使用內建 fetch)
www 子目錄名稱必須與 NPM Proxy Host 的 domain name 相同
程式會自動等待 NPM 啟動後再連接
項目
舊版 (v1)
新版 (v2)
靜態檔案處理
Express
Nginx (原生)
效能
中
高
依賴套件
express
無 (純 Node.js)
配置方式
讀取 Nginx 配置檔
透過 NPM API