【Homelab 筆記】Nginx Proxy Manager安裝

環境:proxmox,vm 跑 ubuntu,對外有固定 IP,自架 DNS Server ,router 是 vm 跑 openwrt

最近因為玩 vllm, 及一堆服務,每個服務的需求環境不同,可以開 vm 解決,但網域的設定,要耗費精神跟 nginx 搏鬥,

原來是 :

 a01.com 在 server a01,經由 router-01 對外

 a02.com 在 server a02,經由 router-02 對外

 a03.com 在 server a03,經由 router-03 對外

都是 80 443 轉 port,很單純。

但現在會是:

 b01.com 在 server a01,port 8080,經由 router-01 對外

 b02.com 在 server a01,port 3000,經由 router-01 對外

 b03.com 在 server a01,port 9001,經由 router-01 對外

我想要 :

已完成生產用的服務,獨立一個 VM:

網域 : b01.com 在 server b01,port 8080,router-01

其他在測試的,就繼續維持。

這一來,網域管理,nginx proxy 就複雜了。

所以,找了 nginx proxy manager 來幫忙。

1.安裝 (Docker Compose)

vm 裝 ubuntu, ip : 192.168.8.203,gateway : 192.168.8.3,router 轉 80,443 port 到 192.168.8.203。

 Docker Compose 安裝: (自行 google :docker 安裝)

習慣將服務裝在目錄 /opt 下面,

sudo mkdir /opt/nmp

cd /opt/nmp

sudo nano docker-compose.yml

# 建立一個 docker-compose.yml:

version: ‘3.8’
services:
  app:
    image: ‘jc21/nginx-proxy-manager:latest’
    restart: unless-stopped
    ports:
      – ’80:80′   # HTTP 流量入口
      – ‘443:443’ # HTTPS 流量入口
      – ’81:81′   # NPM 管理後台入口
    volumes:
      – ./data:/data                  # 設定檔資料庫 (記得備份這個!)
      – ./letsencrypt:/etc/letsencrypt # 憑證存放區 (這個也要備份!)

然後啟動:

sudo docker compose up -d

啟動後,瀏覽器打開 http://192.168.8.203:81 就能看到登入畫面。

要註冊帳號,密碼

2.設定
點開 Proxy Hosted 或 選 Hosts/Proxy Hosts

右上,新增 : AddProxy Host

 案例: 服務端192.168.8.73是用 docker, 服務 port 在 3000,網域名 : a.com.tw

SSL : 選 Request  a New Certificate

Force SSL , HTTP/2 Support 打開,

Save.

會跑一下子,如果沒問題,直接跳到

2. Apache 系統 (解決 SNI 錯誤)

另一個 oa.candle.com.tw 是跑在舊的 Apache 上,而且 Apache 本身已經設定好 SSL (Port 443)。當我用 NPM 指向它時,瀏覽器報錯:Misdirected Request。

原因:NPM 預設是用「IP」去跟後端握手,但 Apache 上面有多個站點,它看到你沒報上「網域名稱 (SNI)」,就拒絕連線了。

解法: 在 Advanced 分頁,貼上這些指令來「騙」過 Apache:

# 強制開啟 SNI
proxy_ssl_server_name on;

# 告訴後端 Apache:「我要連的是 oa.candle.com.tw ($host)」
proxy_ssl_name $host;

# 因為是內網傳輸,就不要檢查後端憑證有沒有過期了,省事
proxy_ssl_verify off;

因為原來的系統已經安裝 SSL

所以連線用 https :

但還是要把 SSL 在NPM上裝一次,

搞定。

備註一下:

AI / LLM 服務 (解決卡頓問題)

如果是  vLLM 服務,後端用 Docker 跑。 AI 回答時會「卡住」,然後一次噴出一大段字,沒有「打字機」的流暢感。

原因:Nginx 預設會開啟 Buffering (緩衝),把資料存多一點再一次傳,但這剛好跟 LLM 的串流 (Streaming) 特性衝突。

解法: 在 NPM 編輯該 Proxy Host,切換到 Advanced 分頁,貼上:

# 關閉緩衝,讓 AI 的字元能即時吐出來
proxy_buffering off;

# 增加 Timeout,避免 AI 思考太久 (超過 60 秒) 被 Nginx 切斷
proxy_read_timeout 600s;

存檔後,串流速度馬上變正常!

、 備份

NPM 資料在掛載的那兩個 Volume 裡。

  1. ./data (這裡面有 SQLite 資料庫)
  2. ./letsencrypt (你的 SSL 憑證都在這)

# 簡單暴力的備份指令
tar -czvf npm-backup.tar.gz ./data ./letsencrypt docker-compose.yml

或整個 vm 備份。

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料