Nginx Proxy Manager (192.168.42.124)
家用反向代理閘道。所有對外網域先進到這台,再轉到內網各服務。
- 主機:
192.168.42.124,部署路徑/opt/nginx-proxy-manager - 管理介面:http://192.168.42.124:81 或 https://ngx-proxy-mgr.lotimmy.com
- 版本:NPM 2.15.1(image
jc21/nginx-proxy-manager:latest,2026-06-03 建立) - 狀態:容器
nginxproxymanager已連續運行 5 週,佔用 80 / 81 / 443
本文件為 2026-08-01 的現況快照,資料來自主機上的
docker-compose.yml與data/database.sqlite。 操作方式(新增服務、刪除、API 用法、踩過的坑)見 NOTES.md。
部署
docker-compose.yml(單一服務):
| 項目 | 設定 |
|---|---|
| image | jc21/nginx-proxy-manager:latest |
| container_name | nginxproxymanager |
| restart | unless-stopped |
| ports | 80:80、443:443、81:81 |
| volumes | ./data:/data、./letsencrypt:/etc/letsencrypt |
| env | TZ=Asia/Taipei(DISABLE_IPV6 已註解保留) |
| dns | 8.8.8.8、1.1.1.1 |
| labels | com.centurylinklabs.watchtower.enable=true(watchtower 自動更新) |
目錄裡的 Makefile 包好了常用指令,專案名自動取當前資料夾名:
make up # 背景啟動
make down # 停止並移除容器
make restart # 重啟
make logs # tail -f 最後 100 行
make ps # 服務狀態
make exec # 進入 app 容器 shell
make clean # 連 volume 一起清掉(危險)
資料
/opt/nginx-proxy-manager/
├── docker-compose.yml
├── Makefile
├── data/ # 193M
│ ├── database.sqlite # 所有設定都在這
│ ├── database.sqlite.bak-2026-04-18
│ ├── keys.json # JWT 金鑰,遺失等於所有 session 失效
│ ├── nginx/ # NPM 產生的 conf(proxy_host / dead_host / stream / …)
│ ├── custom_ssl/ access/ logs/ letsencrypt-acme-challenge/
└── letsencrypt/ # 7.4M,Let's Encrypt 憑證本體
備份只要打包 data/ 與 letsencrypt/ 兩個目錄即可完整還原。目前只有一份 2026-04-18 的手動 DB 備份,沒有排程備份。
物件統計
| 類型 | 數量 |
|---|---|
| Proxy Host | 36(全部啟用) |
| Certificate | 40(全為 Let's Encrypt) |
| Dead Host | 2(*.lotimmy.com、125.229.110.50) |
| Access List | 1(Protect PACS) |
| Redirection Host / Stream | 0 |
| User | 1 |
Proxy Host 一覽
旗標說明:cache 快取、block block common exploits、ws websocket upgrade、h2 HTTP/2。
| 網域 | 轉發目標 | SSL | 旗標 |
|---|---|---|---|
| bark.lotimmy.com | http://192.168.42.116:8080 | SSL | block ws h2 |
| codimd.lotimmy.com | http://192.168.42.120:30921 | 強制 | h2 |
| dicom-server.lotimmy.com | http://192.168.42.124:60606 | SSL | block ws |
| drawnix.timmy.edu.kg | http://192.168.42.124:40000 | SSL | block ws h2 |
| gitea.timmy.edu.kg | http://192.168.42.124:31337 | 強制 | block ws h2 |
| headscale.lotimmy.com | http://192.168.42.126:8080 | SSL | cache block ws h2 |
| hoarder.lotimmy.com | http://192.168.42.124:3000 | SSL | block ws h2 |
| httpbin.lotimmy.com | http://192.168.42.120:30921 | SSL | cache block ws h2 |
| ip.lotimmy.com | http://192.168.42.105:8080 | SSL | block ws h2 |
| lyd-biz.lotimmy.com | http://192.168.42.117:5000 | SSL | block ws h2 |
| lyd-biz-test.lotimmy.com | http://192.168.42.115:5000 | SSL | block ws h2 |
| mailpit.lotimmy.com | http://192.168.42.107:8025 | SSL | block ws h2 |
| myspeed.timmy.edu.kg | http://192.168.42.124:5216 | SSL | ws h2 |
| netbird.timmy.us.kg | http://192.168.42.127:80 | 強制 | block ws h2 |
| ngx-proxy-mgr.lotimmy.com | http://192.168.42.124:81 | SSL | block ws h2 |
| noco.timmy.edu.kg | http://192.168.42.124:28080 | SSL | cache block ws h2 |
| ollama.lotimmy.com | http://100.64.0.30:11434 | SSL | — |
| opengist.lotimmy.com | http://192.168.42.120:30921 | 強制 | block ws h2 |
| openwrt.lotimmy.com | http://192.168.42.10:80 | SSL | cache block ws h2 |
| pacs.lotimmy.com | http://192.168.42.124:8042 | SSL | block ws |
| pb.lotimmy.com | http://192.168.42.124:18090 | 強制 | block ws h2 |
| pbs.lotimmy.com | https://192.168.42.30:8007 | 強制 | block ws |
| pdf.lotimmy.com | http://192.168.42.109:8080 | SSL | block ws h2 |
| picsur.lotimmy.com | http://192.168.42.124:8080 | SSL | cache block ws h2 |
| pogo-viewer.timmy.us.kg | http://192.168.42.108:8028 | SSL | cache block ws h2 |
| poke-api.lotimmy.com | http://192.168.42.108:8008 | SSL | block |
| prompt-opt.lotimmy.com | http://192.168.42.124:8082 | SSL | block ws |
| pve.lotimmy.com | https://192.168.42.38:8006 | 強制 | block ws h2 |
| registry.lotimmy.com | http://192.168.42.124:5000 | SSL | block ws |
| registry-ui.lotimmy.com | http://192.168.42.124:8081 | SSL | — |
| syno.lotimmy.com | https://192.168.42.20:5001 | 強制 | block ws h2 |
| tinyauth.lotimmy.com | http://192.168.42.124:3005 | 強制 | ws h2 |
| tinyauth.timmy.edu.kg | http://192.168.42.124:3006 | 強制 | ws h2 |
| ucapi.timmy.edu.kg | http://192.168.42.108:16888 | SSL | block ws h2 |
| vaultwarden.lotimmy.com | http://192.168.42.120:30921 | 強制 | ws h2 |
| web.lotimmy.com | http://192.168.42.104:80 | SSL | block ws h2 |
後端主機分布
| 後端 | 用途 |
|---|---|
192.168.42.124(本機) |
12 個服務:dicom-server、drawnix、gitea、hoarder、myspeed、noco、pacs、pb、picsur、prompt-opt、registry(+ui)、tinyauth ×2、NPM 自己 |
192.168.42.120:30921 |
4 個網域共用(K8s NodePort):codimd、httpbin、opengist、vaultwarden |
192.168.42.108 |
poke-api、pogo-viewer、ucapi |
192.168.42.30 / .38 / .20 |
PBS / PVE / Synology(皆為 https 後端) |
100.64.0.30 |
ollama,走 Tailscale/Headscale 網段 |
憑證
40 張全部由 Let's Encrypt 簽發。以到期日排序,需要注意的是前段:
| 憑證 | 到期日 | 狀況 |
|---|---|---|
| 2025-10-02 | 2026-08-01 已刪除(DB + certbot) | |
| myip.lotimmy.com | 2026-02-09 | 已過期,無對應 proxy host |
| pangolin.timmy.edu.kg | 2026-02-22 | 已過期,無對應 proxy host |
| minio.lotimmy.com | 2026-05-28 | 已過期,無對應 proxy host |
| 2026-08-09 | 2026-08-01 已刪除(DB + certbot) | |
| auth.lotimmy.com | 2026-08-20 | 無對應 proxy host |
| mailpit.lotimmy.com | 2026-09-01 | 使用中 |
| …其餘 34 張 | 2026-09 ~ 2026-10 | 使用中,正常續期 |
| gitea.timmy.edu.kg (npm-88) | 2026-10-30 | 2026-08-01 新簽 |
已移除的憑證(連同 live / archive / renewal 檔案,皆以 certbot delete 清除):
| 憑證 | 移除日期 | 原因 |
|---|---|---|
| jsbin.timmy.edu.kg (npm-79) | 2026-08-01 | 孤兒憑證,proxy host 早已刪除 |
| typebot.lotimmy.com (npm-49) | 2026-08-01 | 孤兒憑證,2025-10-02 就過期 |
| n8n.lotimmy.com (npm-45) | 2026-08-01 | 服務下線,連同 proxy host 一併移除 |
letsencrypt/live/ 底下有 npm-1 ~ npm-87 的斷號目錄,部分帶 -0001 後綴(同網域重簽產生的新 lineage)。舊 lineage 不會自動清掉,目錄數量比實際憑證多屬正常。
待辦 / 觀察
- 剩 4 張孤兒憑證(myip、pangolin、minio、auth)已無 proxy host 使用,其中 3 張過期。可在 UI 的 SSL Certificates 刪掉。
letsencrypt/底下還有一批 DB 已軟刪除、但檔案還在的舊 lineage(例如npm-4,2025 年 n8n 的舊憑證)。不影響運作,佔用也小,要清再說。- 沒有自動備份。
data/+letsencrypt/打包丟到別台就夠,目前有 2026-04-18 與 2026-08-01 兩份手動 DB 備份。 - watchtower 自動更新已開啟 且 image tag 是
latest,NPM 大版本更新會直接套用,DB migration 失敗時沒有回退點——這是上一點更要緊的原因。 - 單點故障:36 個網域全靠這台,其中 12 個服務也跑在同一台上。
- Gitea 的
ROOT_URL仍是http://192.168.42.124:31337/,所以 UI 顯示的 clone URL、通知信連結都還是舊的 IP:port。要改app.ini的[server] ROOT_URL = https://gitea.timmy.edu.kg/並重啟 Gitea。 dead_host有*.lotimmy.com泛用攔截,未定義的子網域會落到這裡,不會外洩到預設站台。
Description
Languages
Markdown
100%